From 7550c8706c0a9911f473904bcd38e98c6eee91c8 Mon Sep 17 00:00:00 2001 From: nileshChaturvedi Date: Fri, 21 Jun 2024 13:56:24 -0400 Subject: [PATCH 01/13] simple functor implementation --- examples/madness/mra-device/functor.cu | 68 ++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 examples/madness/mra-device/functor.cu diff --git a/examples/madness/mra-device/functor.cu b/examples/madness/mra-device/functor.cu new file mode 100644 index 000000000..f184d7310 --- /dev/null +++ b/examples/madness/mra-device/functor.cu @@ -0,0 +1,68 @@ +#include +#include +#include + + +template +void random_ints(T *arr, int size) { + for (int i = 0; i < size; ++i) { + arr[i] = rand() % 100; // Generate random int between 0 and 99 + } +} + +template +__device__ float cexp(T a) { + return std::exp(a); +} + +class functor { + public: + template + __device__ T operator()(T x) { + return cexp(x); + } +}; + +__global__ void kernel(functor *f, float *x, float *y, int N){ + for (int i = 0; i < N; ++i) { + // printf("exp(%f) = %f\n", x[i], f->operator()(i)); + y[i] = f->operator()(x[i]); + printf("exp(%f) = %f\n", x[i], f->operator()(x[i])); + // x[i] = f(x); + } +} + +int main(){ + int N = 10; + float *a, *c, *da, *dc; + functor f, *d_f; + + a = (float*)malloc(sizeof(float)*N); random_ints(a, N); + c = (float*)malloc(sizeof(float)*N); + + for (int i = 0; i < N; i++) { + std::cout << a[i] << std::endl; + } + + std::cout << "-----------------" << std::endl; + + cudaMalloc(&d_f, sizeof(functor)); + cudaMalloc(&da, sizeof(float)*N); + cudaMalloc(&dc, sizeof(float)*N); + cudaMemcpy(d_f, &f, sizeof(functor), cudaMemcpyHostToDevice); + cudaMemcpy(da, a, sizeof(float)*N, cudaMemcpyHostToDevice); + cudaMemcpy(dc, c, sizeof(float)*N, cudaMemcpyHostToDevice); + + kernel<<<1,1>>>(d_f, da, dc, N); + + cudaMemcpy(c, dc, sizeof(float)*N, cudaMemcpyDeviceToHost); + + for (int i = 0; i < N; ++i) { + std::cout << c[i] << std::endl; + } + + free(a); + + return 0; + +} \ No newline at end of file From 70e70b3a71be741b61bcca430db03b39478e8231 Mon Sep 17 00:00:00 2001 From: nileshChaturvedi Date: Fri, 21 Jun 2024 14:02:35 -0400 Subject: [PATCH 02/13] cleanup Signed-off-by: nileshChaturvedi --- examples/madness/mra-device/functor.cu | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/examples/madness/mra-device/functor.cu b/examples/madness/mra-device/functor.cu index f184d7310..e710d15ac 100644 --- a/examples/madness/mra-device/functor.cu +++ b/examples/madness/mra-device/functor.cu @@ -25,10 +25,8 @@ class functor { __global__ void kernel(functor *f, float *x, float *y, int N){ for (int i = 0; i < N; ++i) { - // printf("exp(%f) = %f\n", x[i], f->operator()(i)); y[i] = f->operator()(x[i]); printf("exp(%f) = %f\n", x[i], f->operator()(x[i])); - // x[i] = f(x); } } @@ -40,12 +38,6 @@ int main(){ a = (float*)malloc(sizeof(float)*N); random_ints(a, N); c = (float*)malloc(sizeof(float)*N); - for (int i = 0; i < N; i++) { - std::cout << a[i] << std::endl; - } - - std::cout << "-----------------" << std::endl; - cudaMalloc(&d_f, sizeof(functor)); cudaMalloc(&da, sizeof(float)*N); cudaMalloc(&dc, sizeof(float)*N); @@ -61,7 +53,8 @@ int main(){ std::cout << c[i] << std::endl; } - free(a); + free(a); free(c); + cudaFree(da); cudaFree(dc); cudaFree(d_f); return 0; From 1380206b578a528c0a8804f6c824d701ccf527a3 Mon Sep 17 00:00:00 2001 From: nileshChaturvedi Date: Fri, 21 Jun 2024 15:03:23 -0400 Subject: [PATCH 03/13] non-const -> const functor and adds templated device kernel Signed-off-by: nileshChaturvedi --- examples/madness/mra-device/functor.cu | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/madness/mra-device/functor.cu b/examples/madness/mra-device/functor.cu index e710d15ac..ca91a819c 100644 --- a/examples/madness/mra-device/functor.cu +++ b/examples/madness/mra-device/functor.cu @@ -18,15 +18,15 @@ __device__ float cexp(T a) { class functor { public: template - __device__ T operator()(T x) { + __device__ T operator()(T x) const{ return cexp(x); } }; -__global__ void kernel(functor *f, float *x, float *y, int N){ +template +__global__ void kernel(const F &f, T *x, T *y, int N){ for (int i = 0; i < N; ++i) { - y[i] = f->operator()(x[i]); - printf("exp(%f) = %f\n", x[i], f->operator()(x[i])); + y[i] = f(x[i]); } } @@ -45,7 +45,7 @@ int main(){ cudaMemcpy(da, a, sizeof(float)*N, cudaMemcpyHostToDevice); cudaMemcpy(dc, c, sizeof(float)*N, cudaMemcpyHostToDevice); - kernel<<<1,1>>>(d_f, da, dc, N); + kernel<<<1,1>>>(*d_f, da, dc, N); cudaMemcpy(c, dc, sizeof(float)*N, cudaMemcpyDeviceToHost); From 7c6ebcf316aa06f787ceafe0305b322892c526f0 Mon Sep 17 00:00:00 2001 From: nileshChaturvedi Date: Fri, 21 Jun 2024 17:22:08 -0400 Subject: [PATCH 04/13] pseudo-paramterized parallelization Signed-off-by: nileshChaturvedi --- examples/madness/mra-device/functor.cu | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/examples/madness/mra-device/functor.cu b/examples/madness/mra-device/functor.cu index ca91a819c..b95f7ee54 100644 --- a/examples/madness/mra-device/functor.cu +++ b/examples/madness/mra-device/functor.cu @@ -1,7 +1,9 @@ #include -#include #include +// Note: To be added to TTG +#define N 2048 +#define THREADS_PER_BLOCK 512 template void random_ints(T *arr, int size) { @@ -24,14 +26,12 @@ class functor { }; template -__global__ void kernel(const F &f, T *x, T *y, int N){ - for (int i = 0; i < N; ++i) { - y[i] = f(x[i]); - } +__global__ void kernel(const F &f, T *x, T *y, int n){ + int index = threadIdx.x + blockIdx.x * blockDim.x; + if (index < n) y[index] = f(x[index]); } int main(){ - int N = 10; float *a, *c, *da, *dc; functor f, *d_f; @@ -45,7 +45,7 @@ int main(){ cudaMemcpy(da, a, sizeof(float)*N, cudaMemcpyHostToDevice); cudaMemcpy(dc, c, sizeof(float)*N, cudaMemcpyHostToDevice); - kernel<<<1,1>>>(*d_f, da, dc, N); + kernel<<>>(*d_f, da, dc, N); cudaMemcpy(c, dc, sizeof(float)*N, cudaMemcpyDeviceToHost); @@ -58,4 +58,4 @@ int main(){ return 0; -} \ No newline at end of file +} From 09590d7d0c0c9d18dfc770601c5cb12c90b6f2b9 Mon Sep 17 00:00:00 2001 From: Joseph Schuchart Date: Fri, 12 Jul 2024 15:07:29 -0400 Subject: [PATCH 05/13] Add mra::Tensor Wraps a ttg::Buffer and provides NDIM-dimensional tensor. Signed-off-by: Joseph Schuchart --- examples/madness/mra-device/tensor.h | 130 +++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 examples/madness/mra-device/tensor.h diff --git a/examples/madness/mra-device/tensor.h b/examples/madness/mra-device/tensor.h new file mode 100644 index 000000000..2eb193851 --- /dev/null +++ b/examples/madness/mra-device/tensor.h @@ -0,0 +1,130 @@ +#ifndef TTG_MRA_TENSOR_H +#define TTG_MRA_TENSOR_H + +#include +#include +#include + +#include +#if defined(TILEDARRAY_HAS_DEVICE) +#define ALLOCATOR TiledArray::device_pinned_allocator + +namespace mra { + + inline void allocator_init(int argc, char **argv) { + // initialize MADNESS so that TA allocators can be created + #if defined(TTG_PARSEC_IMPORTED) + madness::ParsecRuntime::initialize_with_existing_context(ttg::default_execution_context().impl().context()); + #endif // TTG_PARSEC_IMPORTED + madness::initialize(argc, argv, /* nthread = */ 1, /* quiet = */ true); + } + + inline void allocator_fini() { + madness::finalize(); + } + #else // TILEDARRAY_HAS_DEVICE + #define ALLOCATOR std::allocator + + inline void allocator_init(int argc, char **argv) { } + + inline void allocator_fini() { } + + #endif // TILEDARRAY_HAS_DEVICE + + template + class Tensor : public ttg::TTValue> { + public: + using value_type = T; + static const constexpr std::size_t ndims = NDIM; + + private: + using ttvalue_type = ttg::TTValue>; + std::array m_dims; + ttg::buffer m_buffer; + + template + std::size_t offset_impl(std::size_t idx, Dims... idxs) const { + if constexpr (sizeof...(idxs) == 0) { + return m_dims[I]*idx; + } else { + return m_dims[I]*idx + offset(std::forward(idxs...)); + } + } + + // (Re)allocate the tensor memory + void realloc() { + m_buffer.reset(size()); + } + + public: + template + Tensor(Dims... dims) + : ttvalue_type() + , m_dims({dims...}) + , m_buffer(size()) + { + static_assert(sizeof...(Dims) == NDIM, + "Number of arguments does not match number of Dimensions."); + } + + + Tensor(Tensor&& other) = default; + + Tensor& operator=(Tensor&& other) = default; + + /* Deep copy ctor und op are not needed for PO since tiles will never be read + * and written concurrently. Hence shallow copies are enough, will all + * receiving tasks sharing tile data. Re-enable this once the PaRSEC backend + * can handle data sharing without excessive copying */ + Tensor(const Tensor& other) + : ttvalue_type() + , ndims(other.ndims) + , m_dims(other.m_dims) + , m_buffer(other.size()) + { + std::copy_n(other.data(), size(), this->data()); + } + + Tensor& operator=(const Tensor& other) { + m_dims = other.m_dims; + this->realloc(); + std::copy_n(other.data(), size(), this->data()); + return *this; + } + + std::size_t size() const { + return std::reduce(&m_dims[0], &m_dims[ndims-1]); + } + + /* return the offset for the provided indexes */ + template + std::size_t offset(Dims... idxs) const { + static_assert(sizeof...(Dims) == NDIM, + "Number of arguments does not match number of Dimensions."); + return offset_impl<0>(std::forward(idxs...)); + } + + /* access host-side elements */ + template + value_type& operator()(Dims... idxs) { + static_assert(sizeof...(Dims) == NDIM, + "Number of arguments does not match number of Dimensions."); + return m_buffer.get_host_ptr()[offset(std::forward(idxs...))]; + } + + auto get_buffer() { + return m_buffer; + } + + value_type* data() { + return m_buffer.get_host_ptr(); + } + + const value_type* data() const { + return m_buffer.get_host_ptr(); + } + }; + +} // namespace mra + +#endif // TTG_MRA_TENSOR_H \ No newline at end of file From b55c33ed846bea8fd16aabfa887f492ca46df372 Mon Sep 17 00:00:00 2001 From: Joseph Schuchart Date: Mon, 15 Jul 2024 09:43:07 -0400 Subject: [PATCH 06/13] Tensor: Add missing includes Signed-off-by: Joseph Schuchart --- examples/madness/mra-device/tensor.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/examples/madness/mra-device/tensor.h b/examples/madness/mra-device/tensor.h index 2eb193851..34fc493a0 100644 --- a/examples/madness/mra-device/tensor.h +++ b/examples/madness/mra-device/tensor.h @@ -5,6 +5,8 @@ #include #include +#include + #include #if defined(TILEDARRAY_HAS_DEVICE) #define ALLOCATOR TiledArray::device_pinned_allocator @@ -36,10 +38,11 @@ namespace mra { public: using value_type = T; static const constexpr std::size_t ndims = NDIM; + using dims_array_t = std::array; private: using ttvalue_type = ttg::TTValue>; - std::array m_dims; + dims_array_t m_dims; ttg::buffer m_buffer; template From ab746fdb2be1381f46c24f0b64ae8593b19a1bdb Mon Sep 17 00:00:00 2001 From: Joseph Schuchart Date: Tue, 16 Jul 2024 14:09:13 -0400 Subject: [PATCH 07/13] Split Tensor and TensorView and add example Signed-off-by: Joseph Schuchart --- examples/madness/mra-device/tensor.h | 81 +++---------- examples/madness/mra-device/tensorview.h | 113 ++++++++++++++++++ .../madness/mra-device/tests/tensor_test.cc | 39 ++++++ 3 files changed, 171 insertions(+), 62 deletions(-) create mode 100644 examples/madness/mra-device/tensorview.h create mode 100644 examples/madness/mra-device/tests/tensor_test.cc diff --git a/examples/madness/mra-device/tensor.h b/examples/madness/mra-device/tensor.h index 34fc493a0..36266b1a2 100644 --- a/examples/madness/mra-device/tensor.h +++ b/examples/madness/mra-device/tensor.h @@ -7,52 +7,25 @@ #include -#include -#if defined(TILEDARRAY_HAS_DEVICE) -#define ALLOCATOR TiledArray::device_pinned_allocator +#include "tensorview.h" namespace mra { - inline void allocator_init(int argc, char **argv) { - // initialize MADNESS so that TA allocators can be created - #if defined(TTG_PARSEC_IMPORTED) - madness::ParsecRuntime::initialize_with_existing_context(ttg::default_execution_context().impl().context()); - #endif // TTG_PARSEC_IMPORTED - madness::initialize(argc, argv, /* nthread = */ 1, /* quiet = */ true); - } - - inline void allocator_fini() { - madness::finalize(); - } - #else // TILEDARRAY_HAS_DEVICE - #define ALLOCATOR std::allocator - - inline void allocator_init(int argc, char **argv) { } - - inline void allocator_fini() { } - - #endif // TILEDARRAY_HAS_DEVICE - - template + template> class Tensor : public ttg::TTValue> { public: - using value_type = T; - static const constexpr std::size_t ndims = NDIM; - using dims_array_t = std::array; + using value_type = std::decay_t; + using size_type = std::size_t; + using allocator_type = Allocator; + static const constexpr int ndims = NDIM; + using view_type = TensorView; + using buffer_type = ttg::Buffer; + using dims_array_t = std::array; private: - using ttvalue_type = ttg::TTValue>; + using ttvalue_type = ttg::TTValue>; dims_array_t m_dims; - ttg::buffer m_buffer; - - template - std::size_t offset_impl(std::size_t idx, Dims... idxs) const { - if constexpr (sizeof...(idxs) == 0) { - return m_dims[I]*idx; - } else { - return m_dims[I]*idx + offset(std::forward(idxs...)); - } - } + buffer_type m_buffer; // (Re)allocate the tensor memory void realloc() { @@ -63,7 +36,7 @@ namespace mra { template Tensor(Dims... dims) : ttvalue_type() - , m_dims({dims...}) + , m_dims({static_cast(dims)...}) , m_buffer(size()) { static_assert(sizeof...(Dims) == NDIM, @@ -81,7 +54,6 @@ namespace mra { * can handle data sharing without excessive copying */ Tensor(const Tensor& other) : ttvalue_type() - , ndims(other.ndims) , m_dims(other.m_dims) , m_buffer(other.size()) { @@ -95,36 +67,21 @@ namespace mra { return *this; } - std::size_t size() const { - return std::reduce(&m_dims[0], &m_dims[ndims-1]); - } - - /* return the offset for the provided indexes */ - template - std::size_t offset(Dims... idxs) const { - static_assert(sizeof...(Dims) == NDIM, - "Number of arguments does not match number of Dimensions."); - return offset_impl<0>(std::forward(idxs...)); - } - - /* access host-side elements */ - template - value_type& operator()(Dims... idxs) { - static_assert(sizeof...(Dims) == NDIM, - "Number of arguments does not match number of Dimensions."); - return m_buffer.get_host_ptr()[offset(std::forward(idxs...))]; + size_type size() const { + return std::reduce(&m_dims[0], &m_dims[ndims-1], 1, std::multiplies{}); } auto get_buffer() { return m_buffer; } - value_type* data() { - return m_buffer.get_host_ptr(); + const auto get_buffer() const { + return m_buffer; } - const value_type* data() const { - return m_buffer.get_host_ptr(); + /* returns a view for the current memory space */ + view_type current_view() { + return view_type(m_buffer.current_device_ptr(), m_dims); } }; diff --git a/examples/madness/mra-device/tensorview.h b/examples/madness/mra-device/tensorview.h new file mode 100644 index 000000000..83219a26b --- /dev/null +++ b/examples/madness/mra-device/tensorview.h @@ -0,0 +1,113 @@ +#ifndef TTG_MRA_TENSORVIEW_H +#define TTG_MRA_TENSORVIEW_H + +#include +#include +#include + +#include + +namespace mra { + + template + class TensorView { + public: + using value_type = std::decay_t; + using size_type = std::size_t; + static const constexpr int ndims = NDIM; + using dims_array_t = std::array; + + protected: + + template + size_type offset_impl(size_type idx, Dims... idxs) const { + if constexpr (sizeof...(idxs) == 0) { + return m_dims[I]*idx; + } else { + return m_dims[I]*idx + offset_impl(std::forward(idxs...)); + } + } + + void reset(value_type *ptr, dims_array_t dims) { + m_ptr = ptr; + m_dims = dims; + } + + public: + template + TensorView(value_type *ptr, Dims... dims) + : m_dims({dims...}) + , m_ptr(ptr) + { + static_assert(sizeof...(Dims) == NDIM, + "Number of arguments does not match number of Dimensions."); + } + + TensorView(value_type *ptr, const dims_array_t& dims) + : m_dims(dims) + , m_ptr(ptr) + { } + + TensorView(TensorView&& other) = default; + + TensorView& operator=(TensorView&& other) = default; + + /* Deep copy ctor und op are not needed for PO since tiles will never be read + * and written concurrently. Hence shallow copies are enough, will all + * receiving tasks sharing tile data. Re-enable this once the PaRSEC backend + * can handle data sharing without excessive copying */ + TensorView(const TensorView& other) + : m_dims(other.m_dims) + , m_ptr(other.m_ptr) + { } + + TensorView& operator=(const TensorView& other) { + m_dims = other.m_dims; + m_ptr = other.m_ptr; + return *this; + } + + size_type size() const { + return std::reduce(&m_dims[0], &m_dims[ndims-1], 1, std::multiplies{}); + } + + size_type dim(size_type d) const { + return m_dims[d]; + } + + const dims_array_t& dims() const { + return m_dims; + } + + /* return the offset for the provided indexes */ + template + size_type offset(Dims... idxs) const { + static_assert(sizeof...(Dims) == NDIM, + "Number of arguments does not match number of Dimensions."); + return offset_impl<0>(std::forward(idxs)...); + } + + /* access host-side elements */ + template + value_type& operator()(Dims... idxs) { + static_assert(sizeof...(Dims) == NDIM, + "Number of arguments does not match number of Dimensions."); + return m_ptr[offset(std::forward(idxs)...)]; + } + + value_type* data() { + return m_ptr; + } + + const value_type* data() const { + return m_ptr; + } + + private: + dims_array_t m_dims; + value_type *m_ptr; + }; + +} // namespace mra + +#endif // TTG_MRA_TENSORVIEW_H \ No newline at end of file diff --git a/examples/madness/mra-device/tests/tensor_test.cc b/examples/madness/mra-device/tests/tensor_test.cc new file mode 100644 index 000000000..44728037b --- /dev/null +++ b/examples/madness/mra-device/tests/tensor_test.cc @@ -0,0 +1,39 @@ +#include +#include + +#include "tensor.h" + + + +int main(int argc, char **argv) { + ttg::initialize(argc, argv); + + using matrix_type = mra::Tensor; + using matrixview_type = typename matrix_type::view_type; + matrix_type m1 = matrix_type(2, 2); // 2x2 matrix + matrix_type m2 = matrix_type(4, 4); // 4x4 matrix + assert(m1.size() == 4); + assert(m2.size() == 16); + + matrixview_type m2v = m2.current_view(); + + for (int i = 0; i < m2v.dim(0); ++i) { + for (int j = 0; j < m2v.dim(1); ++j) { + m2v(i, j) = 1.0; + } + } + + m1 = std::move(m2); // move m2 into m1 + assert(m1.size() == 16); + + // check m1, should all be 1 + matrixview_type m1v = m1.current_view(); + for (int i = 0; i < m2v.dim(0); ++i) { + for (int j = 0; j < m2v.dim(1); ++j) { + assert(m1v(i, j) = 1.0); + } + } + + + ttg::finalize(); +} \ No newline at end of file From 6f5e5d8e028ff9779799493ccddc78d1f45b3480 Mon Sep 17 00:00:00 2001 From: Joseph Schuchart Date: Mon, 22 Jul 2024 09:08:30 -0400 Subject: [PATCH 08/13] Provide TensorSlice TensorSlice can be used without the underlying Tensor and only stores a pointer plus the modified Slice information. It can thus be easily copied between memory spaces, provided that the TensorSlice was created from a TensorView on the right memory space. Signed-off-by: Joseph Schuchart --- examples/CMakeLists.txt | 2 + examples/madness/mra-device/tensor.h | 8 +- examples/madness/mra-device/tensorview.h | 367 +++++++++++++++++- .../madness/mra-device/tests/tensor_test.cc | 45 ++- 4 files changed, 411 insertions(+), 11 deletions(-) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index c34e3c07e..1fe868841 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -65,6 +65,8 @@ if (TARGET MADworld) add_ttg_executable(mrattg-streaming madness/mrattg_streaming.cc mragl.cc mratwoscale.cc mradomain.h mrafunctiondata.h mrafunctionfunctor.h mrafunctionnode.h mragl.h mrahash.h mrakey.h mramisc.h mramxm.h mrarange.h mrasimpletensor.h mratwoscale.h mratypes.h LINK_LIBRARIES blaspp MADworld) endif () + + add_ttg_executable(mradevice madness/mra-device/tests/tensor_test.cc) endif (TARGET MADworld) add_ttg_executable(wavefront-wf wavefront/wavefront-wf.cc SINGLERANKONLY) diff --git a/examples/madness/mra-device/tensor.h b/examples/madness/mra-device/tensor.h index 36266b1a2..48b20be10 100644 --- a/examples/madness/mra-device/tensor.h +++ b/examples/madness/mra-device/tensor.h @@ -17,10 +17,12 @@ namespace mra { using value_type = std::decay_t; using size_type = std::size_t; using allocator_type = Allocator; - static const constexpr int ndims = NDIM; using view_type = TensorView; using buffer_type = ttg::Buffer; - using dims_array_t = std::array; + + static constexpr int ndim() { return NDIM; } + + using dims_array_t = std::array; private: using ttvalue_type = ttg::TTValue>; @@ -68,7 +70,7 @@ namespace mra { } size_type size() const { - return std::reduce(&m_dims[0], &m_dims[ndims-1], 1, std::multiplies{}); + return std::reduce(&m_dims[0], &m_dims[ndim()], 1, std::multiplies{}); } auto get_buffer() { diff --git a/examples/madness/mra-device/tensorview.h b/examples/madness/mra-device/tensorview.h index 83219a26b..7df47c43c 100644 --- a/examples/madness/mra-device/tensorview.h +++ b/examples/madness/mra-device/tensorview.h @@ -9,25 +9,91 @@ namespace mra { + class Slice { + public: + static constexpr long END = std::numeric_limits::max(); + long start; //< Start of slice (must be signed type) + long finish; //< Exclusive end of slice (must be signed type) + long stride; //< Stride for slice (must be signed type) + long count; //< Number of elements in slice (not known until dimension is applied; negative indicates not computed) + + Slice() : start(0), finish(END), stride(1), count(-1) {}; // indicates entire range + Slice(long start) : start(start), finish(start+1), stride(1) {} // a single element + Slice(long start, long end, long stride=1) : start(start), finish(end), stride(stride) {}; + + /// Once we know the dimension we adjust the start/end/count/finish to match, and do sanity checks + void apply_dim(long dim) { + if (start == END) {start = dim-1;} + else if (start < 0) {start += dim;} + + if (finish == END && stride > 0) {finish = dim;} + else if (finish == END && stride < 0) {finish = -1;} + else if (finish < 0) {finish += dim;} + + count = std::max(0l,((finish-start-stride/std::abs(stride))/stride+1)); + assert((count==0) || ((count<=dim) && (start>=0 && start<=dim))); + finish = start + count*stride; // finish is one past the last element + } + + struct iterator { + long value; + const long stride; + iterator (long value, long stride) : value(value), stride(stride) {} + operator long() const {return value;} + long operator*() const {return value;} + iterator& operator++ () {value+=stride; return *this;} + bool operator!=(const iterator&other) {return value != other.value;} + }; + + iterator begin() const {assert(count>=0); return iterator(start,stride); } + iterator end() const {assert(count>=0); return iterator(finish,stride); } + + Slice& operator=(const Slice& other) { + if (this != &other) { + start = other.start; + finish = other.finish; + stride = other.stride; + count = other.count; + } + return *this; + } + }; // Slice + + template class TensorView { public: using value_type = std::decay_t; using size_type = std::size_t; - static const constexpr int ndims = NDIM; - using dims_array_t = std::array; + static constexpr int ndim() { return NDIM; } + using dims_array_t = std::array; + static constexpr bool is_tensor() { return true; } protected: template size_type offset_impl(size_type idx, Dims... idxs) const { if constexpr (sizeof...(idxs) == 0) { - return m_dims[I]*idx; + return idx; } else { - return m_dims[I]*idx + offset_impl(std::forward(idxs...)); + return idx*std::reduce(&m_dims[I+1], &m_dims[ndim()], 1, std::multiplies{}) + + offset_impl(std::forward(idxs...)); } } + template + void last_level_op_helper(Fn&& fn, std::index_sequence, Args... args) { + if constexpr (sizeof...(Is) == 0) { + fn(args...); + } else { + /* iterate over this dimension and recurse down one */ + for (size_type i = 0; i < m_dims[I]; ++i) { + last_level_op_helper(std::forward(fn), std::index_sequence{}, args..., i); + } + } + } + + void reset(value_type *ptr, dims_array_t dims) { m_ptr = ptr; m_dims = dims; @@ -68,7 +134,7 @@ namespace mra { } size_type size() const { - return std::reduce(&m_dims[0], &m_dims[ndims-1], 1, std::multiplies{}); + return std::reduce(&m_dims[0], &m_dims[ndim()-1], 1, std::multiplies{}); } size_type dim(size_type d) const { @@ -79,6 +145,14 @@ namespace mra { return m_dims; } + size_type stride(size_type d) const { + std::size_t s = 1; + for (std::size_t i = 0; i < d; ++i) { + s *= m_dims[i]; + } + return s; + } + /* return the offset for the provided indexes */ template size_type offset(Dims... idxs) const { @@ -103,11 +177,294 @@ namespace mra { return m_ptr; } + std::array slices() const { + std::array res; + for (std::size_t d = 0; d < ndim(); ++d) { + res[d] = Slice(0, m_dims[d]); + } + return res; + } + + /// Fill with scalar + /// Device: assumes this operation is called by all threads in a block + /// Host: assumes this operation is called by a single CPU thread + TensorView& operator=(const value_type& value) { +#ifdef __CUDA_ARCH__ + /* let's start simple: iterate sequentially over all but the fastest dimension and use threads in the last + * dimension to do the assignment in parallel. This should be revisited later.*/ + auto assign = [&](auto... args){ + /* last dimension, do assignment */ + int tid = threadIdx.x + blockDim.x * threadIdx.y; + for (int i = tid; i < m_dims[ndim()-1]; i += blockDim.x*blockDim.y) { + this->operator()(args..., i) = value; + } + }; +#else // __CUDA_ARCH__ + auto assign = [&](auto... args){ + /* last dimension, do assignment */ + for (int i = 0; i < m_dims[ndim()-1]; ++i) { + this->operator()(args..., i) = value; + } + }; +#endif // __CUDA_ARCH__ + last_level_op_helper(assign, std::make_index_sequence{}); + return *this; + } + + /// Scale by scalar + /// Device: assumes this operation is called by all threads in a block + /// Host: assumes this operation is called by a single CPU thread + TensorView& operator*=(const value_type& value) { +#ifdef __CUDA_ARCH__ + /* let's start simple: iterate sequentially over all but the fastest dimension and use threads in the last + * dimension to do the assignment in parallel. This should be revisited later.*/ + auto assign = [&](auto... args){ + /* last dimension, do assignment */ + int tid = threadIdx.x + blockDim.x * threadIdx.y; + for (int i = tid; i < m_dims[ndim()-1]; i += blockDim.x*blockDim.y) { + this->operator()(args..., i) *= value; + } + }; +#else // __CUDA_ARCH__ + auto assign = [&](auto... args){ + /* last dimension, do assignment */ + for (int i = 0; i < m_dims[ndim()-1]; ++i) { + this->operator()(args..., i) *= value; + } + }; +#endif // __CUDA_ARCH__ + last_level_op_helper(assign, std::make_index_sequence{}); + return *this; + } + + /// Copy into patch + /// Device: assumes this operation is called by all threads in a block + /// Host: assumes this operation is called by a single CPU thread + template + typename std::enable_if::type + operator=(const otherT& other) { +#ifdef __CUDA_ARCH__ + auto assign = [&](auto... args){ + /* last dimension, do assignment */ + int tid = threadIdx.x + blockDim.x * threadIdx.y; + for (int i = tid; i < m_dims[ndim()-1]; i += blockDim.x*blockDim.y) { + this->operator()(args..., i) = other(args..., i); + } + }; +#else // __CUDA_ARCH__ + auto assign = [&](auto... args){ + /* last dimension, do assignment */ + for (int i = 0; i < m_dims[ndim()-1]; ++i) { + this->operator()(args..., i) = other(args..., i); + } + }; +#endif // __CUDA_ARCH__ + last_level_op_helper(assign, std::make_index_sequence{}); + return *this; + } + private: dims_array_t m_dims; value_type *m_ptr; }; + + + template + class TensorSlice { + + public: + using view_type = TensorViewT; + using value_type = typename view_type::value_type; + + static constexpr int ndim() { return TensorViewT::ndim(); } + + static constexpr bool is_tensor() { return true; } + + private: + value_type* m_ptr; + std::array m_slices; + + // Computes index in dimension d for underlying tensor using slice info + + template + std::size_t offset_helper(std::index_sequence, Arg arg, Args... args) const { + std::size_t idx = (m_slices[I].start + arg)*m_slices[I].stride; + if constexpr (sizeof...(Args) > 0) { + idx += offset_helper(std::index_sequence{}, std::forward(args)...); + } + return idx; + } + + template + void last_level_op_helper(Fn&& fn, std::index_sequence, Args... args) { + if constexpr (sizeof...(Is) == 0) { + fn(args...); + } else { + /* iterate over this dimension and recurse down one */ + for (std::size_t i = 0; i < m_slices[I].count; ++i) { + last_level_op_helper(std::forward(fn), std::index_sequence{}, args..., i); + } + } + } + + + public: + TensorSlice() = delete; // slice is useless without a view + + TensorSlice(view_type& view, const std::array& slices) + : m_ptr(view.data()) + , m_slices(slices) + { + /* adjust the slice dimensions to the tensor */ + auto view_slices = view.slices(); + std::size_t stride = 1; + for (ssize_t d = ndim()-1; d >= 0; --d) { + m_slices[d].apply_dim(view.dim(d)); + /* stride stores the stride in the original TensorView */ + m_slices[d].stride *= stride; + stride *= view.dim(d); + /* account for the stride of the underlying view */ + m_slices[d].stride *= view_slices[d].stride; + /* adjust the start relative to the underlying view */ + m_slices[d].start += view_slices[d].start * view_slices[d].stride; + } + } + + TensorSlice(TensorSlice&& other) = default; + TensorSlice(const TensorSlice& other) = default; + + /// Returns the base pointer + value_type* data() { + return m_ptr; + } + + /// Returns the const base pointer + const value_type* data() const { + return m_ptr; + } + + /// Returns number of elements in the tensor at runtime + size_t size() const { + std::size_t nelem = 1; + for (size_t d = 0; d < ndim(); ++d) { + nelem *= m_slices[d].count; + } + return nelem; + } + + /// Returns size of dimension d at runtime + std::size_t dim(size_t d) const { return m_slices[d].count; } + + /// Returns array containing size of each dimension at runtime + std::array dims() const { + std::array dimensions; + for (size_t d = 0; d < ndim(); ++d) { + dimensions[d] = m_slices[d].count; + } + return dimensions; + } + + std::array slices() const { + return m_slices; + } + + template + auto& operator()(Args...args) { + static_assert(ndim() == sizeof...(Args), "TensorSlice number of indices must match dimension"); + return m_ptr[offset_helper(std::index_sequence_for{}, std::forward(args)...)]; + } + + template + const auto& operator()(Args...args) const { + static_assert(ndim() == sizeof...(Args), "TensorSlice number of indices must match dimension"); + return m_ptr[offset_helper(std::index_sequence_for{}, std::forward(args)...)]; + } + + /// Fill with scalar + /// Device: assumes this operation is called by all threads in a block + /// Host: assumes this operation is called by a single CPU thread + template > + typename std::enable_if,X&>::type + operator=(const value_type& value) { +#ifdef __CUDA_ARCH__ + /* let's start simple: iterate sequentially over all but the fastest dimension and use threads in the last + * dimension to do the assignment in parallel. This should be revisited later.*/ + auto assign = [&](auto... args){ + /* last dimension, do assignment */ + int tid = threadIdx.x + blockDim.x * threadIdx.y; + for (int i = tid; i < m_slices[ndim()-1].count; i += blockDim.x*blockDim.y) { + this->operator()(args..., i) = value; + } + }; +#else // __CUDA_ARCH__ + auto assign = [&](auto... args){ + /* last dimension, do assignment */ + for (int i = 0; i < m_slices[ndim()-1].count; ++i) { + this->operator()(args..., i) = value; + } + }; +#endif // __CUDA_ARCH__ + last_level_op_helper(assign, std::make_index_sequence{}); + return *this; + } + + /// Scale by scalar + /// Device: assumes this operation is called by all threads in a block + /// Host: assumes this operation is called by a single CPU thread + template > + typename std::enable_if,X&>::type + operator*=(const value_type& value) { +#ifdef __CUDA_ARCH__ + /* let's start simple: iterate sequentially over all but the fastest dimension and use threads in the last + * dimension to do the assignment in parallel. This should be revisited later.*/ + auto assign = [&](auto... args){ + /* last dimension, do assignment */ + int tid = threadIdx.x + blockDim.x * threadIdx.y; + for (int i = tid; i < m_slices[ndim()-1].count; i += blockDim.x*blockDim.y) { + this->operator()(args..., i) *= value; + } + }; +#else // __CUDA_ARCH__ + auto assign = [&](auto... args){ + /* last dimension, do assignment */ + for (int i = 0; i < m_slices[ndim()-1].count; ++i) { + this->operator()(args..., i) *= value; + } + }; +#endif // __CUDA_ARCH__ + last_level_op_helper(assign, std::make_index_sequence{}); + return *this; + } + + /// Copy into patch + /// Device: assumes this operation is called by all threads in a block + /// Host: assumes this operation is called by a single CPU thread + typename std::enable_if,TensorSlice&>::type + operator=(const TensorSlice& other) { +#ifdef __CUDA_ARCH__ + auto assign = [&](auto... args){ + /* last dimension, do assignment */ + int tid = threadIdx.x + blockDim.x * threadIdx.y; + for (int i = tid; i < m_slices[ndim()-1].count; i += blockDim.x*blockDim.y) { + this->operator()(args..., i) = other(args..., i); + } + }; +#else // __CUDA_ARCH__ + auto assign = [&](auto... args){ + /* last dimension, do assignment */ + for (int i = 0; i < m_slices[ndim()-1].count; ++i) { + this->operator()(args..., i) = other(args..., i); + } + }; +#endif // __CUDA_ARCH__ + last_level_op_helper(assign, std::make_index_sequence{}); + return *this; + } + }; + + + } // namespace mra #endif // TTG_MRA_TENSORVIEW_H \ No newline at end of file diff --git a/examples/madness/mra-device/tests/tensor_test.cc b/examples/madness/mra-device/tests/tensor_test.cc index 44728037b..e4e6c1cb7 100644 --- a/examples/madness/mra-device/tests/tensor_test.cc +++ b/examples/madness/mra-device/tests/tensor_test.cc @@ -1,11 +1,12 @@ #include #include -#include "tensor.h" +#include "../tensor.h" int main(int argc, char **argv) { + ttg::initialize(argc, argv); using matrix_type = mra::Tensor; @@ -17,6 +18,7 @@ int main(int argc, char **argv) { matrixview_type m2v = m2.current_view(); + /* explicit iteration */ for (int i = 0; i < m2v.dim(0); ++i) { for (int j = 0; j < m2v.dim(1); ++j) { m2v(i, j) = 1.0; @@ -28,12 +30,49 @@ int main(int argc, char **argv) { // check m1, should all be 1 matrixview_type m1v = m1.current_view(); + for (int i = 0; i < m1v.dim(0); ++i) { + for (int j = 0; j < m1v.dim(1); ++j) { + assert(m1v(i, j) == 1.0); + } + } + + + // check tensor slices: slice 2x2 matrix from the center, scale by 2, and check + std::array slices = {mra::Slice(1, 3), mra::Slice(1, 3)}; + auto s1 = mra::TensorSlice(m1v, slices); + s1 *= 2; + for (int i = 0; i < m1v.dim(0); ++i) { + for (int j = 0; j < m1v.dim(1); ++j) { + if ((i < 1 || i > 2) || (j < 1 || j > 2)) { + assert(m1v(i, j) == 1.0); + } else { + assert(m1v(i, j) == 2.0); + } + } + } + + // create new tensor, set to 1.0 and assign a slice + m2 = matrix_type(4, 4); // 4x4 matrix + m2v = m2.current_view(); + m2v = 1.0; // set all elements to 1.0 for (int i = 0; i < m2v.dim(0); ++i) { for (int j = 0; j < m2v.dim(1); ++j) { - assert(m1v(i, j) = 1.0); + assert(m2v(i, j) == 1.0); + } + } + auto s2 = mra::TensorSlice(m2v, slices); + s2 = s1; // assign slice + assert(m2.size() == 16); + for (int i = 0; i < m2v.dim(0); ++i) { + for (int j = 0; j < m2v.dim(1); ++j) { + if ((i < 1 || i > 2) || (j < 1 || j > 2)) { + assert(m2v(i, j) == 1.0); + } else { + assert(m2v(i, j) == 2.0); + } } } - ttg::finalize(); + } \ No newline at end of file From 6b2092ac35241adfa024b9d601ef55d31e103945 Mon Sep 17 00:00:00 2001 From: Joseph Schuchart Date: Mon, 22 Jul 2024 17:37:31 -0400 Subject: [PATCH 09/13] Hotfix for assert in ttg_data_copy This needs to be carefully investigated: when moving a Tensor into another Tensor the underlying Buffer does not register its data properly because the buffer thinks it's already been moved. This change forces re-registration everytime but there might be a catch... Signed-off-by: Joseph Schuchart --- ttg/ttg/parsec/ttg_data_copy.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ttg/ttg/parsec/ttg_data_copy.h b/ttg/ttg/parsec/ttg_data_copy.h index a4b4575fa..e68bcce60 100644 --- a/ttg/ttg/parsec/ttg_data_copy.h +++ b/ttg/ttg/parsec/ttg_data_copy.h @@ -571,7 +571,7 @@ namespace ttg_parsec { ttg_parsec_data_wrapper_t& ttg_parsec_data_wrapper_t::operator=(ttg_parsec_data_wrapper_t&& other) { m_data = std::move(other.m_data); /* check whether the owning ttg_data_copy has already moved us */ - if (other.m_ttg_copy != m_ttg_copy) { + //if (other.m_ttg_copy != m_ttg_copy) { /* remove from old ttg copy */ other.remove_from_owner(); @@ -579,7 +579,7 @@ namespace ttg_parsec { /* register with the new ttg_copy */ m_ttg_copy->add_device_data(this); } - } + //} return *this; } From 0f6df6f50057d417e6d2d22a557a31d64ef96dce Mon Sep 17 00:00:00 2001 From: Joseph Schuchart Date: Thu, 25 Jul 2024 17:40:30 -0400 Subject: [PATCH 10/13] Towards device-enabled project function Had to copy a bunch of headers to remove the SimpleTensor/FixedTensor and adjust for potential compilation in CUDA context. Does not yet compile because we cannot co_await from within a function that is not a coroutine. Need to come up with a way to switch between coroutines inside a task. Signed-off-by: Joseph Schuchart --- examples/CMakeLists.txt | 6 +- examples/madness/mra-device/functiondata.h | 149 +++++++++ examples/madness/mra-device/functionfunctor.h | 114 +++++++ examples/madness/mra-device/functionnode.h | 117 +++++++ examples/madness/mra-device/gaussian.h | 95 ++++++ examples/madness/mra-device/gl.cc | 246 +++++++++++++++ examples/madness/mra-device/gl.cu | 166 ++++++++++ examples/madness/mra-device/gl.h | 38 +++ examples/madness/mra-device/kernels.cu | 294 ++++++++++++++++++ examples/madness/mra-device/kernels.h | 34 ++ examples/madness/mra-device/mrattg-device.cc | 130 ++++++++ examples/madness/mra-device/tensor.h | 14 +- examples/madness/mra-device/tensorview.h | 245 ++++++++------- examples/mrafunctiondata.h | 2 +- examples/mrakey.h | 43 ++- examples/mratwoscale.h | 8 +- ttg/ttg/parsec/buffer.h | 5 +- 17 files changed, 1553 insertions(+), 153 deletions(-) create mode 100644 examples/madness/mra-device/functiondata.h create mode 100644 examples/madness/mra-device/functionfunctor.h create mode 100644 examples/madness/mra-device/functionnode.h create mode 100644 examples/madness/mra-device/gaussian.h create mode 100644 examples/madness/mra-device/gl.cc create mode 100644 examples/madness/mra-device/gl.cu create mode 100644 examples/madness/mra-device/gl.h create mode 100644 examples/madness/mra-device/kernels.cu create mode 100644 examples/madness/mra-device/kernels.h create mode 100644 examples/madness/mra-device/mrattg-device.cc diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 1fe868841..c26dab882 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -58,6 +58,11 @@ if (TARGET tiledarray) endif(TTG_HAVE_HIP) endif() +add_ttg_executable(tensortest madness/mra-device/tests/tensor_test.cc) +#if (TTG_HAVE_CUDA) + add_ttg_executable(mradevice-cuda madness/mra-device/mrattg-device.cc madness/mra-device/gl.cc RUNTIMES "parsec") + #endif (TTG_HAVE_CUDA) + if (TARGET MADworld) add_ttg_executable(madness-1d madness/madness-1d/madness-1d.cc RUNTIMES "mad") if (TARGET blaspp) #(CBLAS_FOUND AND MKL_FOUND) @@ -66,7 +71,6 @@ if (TARGET MADworld) add_ttg_executable(mrattg-streaming madness/mrattg_streaming.cc mragl.cc mratwoscale.cc mradomain.h mrafunctiondata.h mrafunctionfunctor.h mrafunctionnode.h mragl.h mrahash.h mrakey.h mramisc.h mramxm.h mrarange.h mrasimpletensor.h mratwoscale.h mratypes.h LINK_LIBRARIES blaspp MADworld) endif () - add_ttg_executable(mradevice madness/mra-device/tests/tensor_test.cc) endif (TARGET MADworld) add_ttg_executable(wavefront-wf wavefront/wavefront-wf.cc SINGLERANKONLY) diff --git a/examples/madness/mra-device/functiondata.h b/examples/madness/mra-device/functiondata.h new file mode 100644 index 000000000..679a91377 --- /dev/null +++ b/examples/madness/mra-device/functiondata.h @@ -0,0 +1,149 @@ +#ifndef MADFUNCTIONDATA_H_INCL +#define MADFUNCTIONDATA_H_INCL + +#include "../../mratypes.h" +#include "../../mradomain.h" +#include "../../mratwoscale.h" +#include "tensor.h" +#include "gl.h" + +namespace mra { + + /// Convenient co-location of frequently used data + template + class FunctionData { + std::size_t K; + Tensor phi; // phi(mu,i) = phi(x[mu],i) --- value of scaling functions at quadrature points on level 0 + Tensor phibar; // phibar(mu,i) = w[mu]*phi(x[mu],i) + Tensor HG; // Two scale filter applied from left to scaling function coeffs + Tensor HGT; // Two scale filter applied from right to scaling function coeffs + Tensor rm, r0, rp; // blocks of the ABGV central derivative operator + std::unique_ptr x, w; // Quadrature points and weights on level 0 + + void make_abgv_diff_operator() { + double iphase = 1.0; + auto r0_view = r0.current_view(); + auto rm_view = rm.current_view(); + auto rp_view = rp.current_view(); + for (auto i: range(K)) { + double jphase = 1.0; + for (auto j : range(K)) { + double gammaij = std::sqrt(double((2*i+1)*(2*j+1))); + double Kij; + if (((i-j)>0) && (((i-j)%2)==1)) + Kij = 2.0; + else + Kij = 0.0; + + r0_view(i,j) = T(0.5*(1.0 - iphase*jphase - 2.0*Kij)*gammaij); + rm_view(i,j) = T(0.5*jphase*gammaij); + rp_view(i,j) = T(-0.5*iphase*gammaij); + } + } + } + + /// Set phi(mu,i) to be phi(x[mu],i) + void make_phi() { + /* retrieve x, w from constant memory */ + const T *x, *w; + detail::GLget(&x, &w, K); + T* p = new T[K]; + auto phi_view = phi.current_view(); + for (size_t mu : range(K)) { + detail::legendre_scaling_functions(x[mu], K, &p[0]); + for (size_t i : range(K)) { + phi_view(mu,i) = p[i]; + } + } + delete[] p; + } + + /// Set phibar(mu,i) to be w[mu]*phi(x[mu],i) + void make_phibar() { + /* retrieve x, w from constant memory */ + const T *x, *w; + detail::GLget(&x, &w, K); + T *p = new T[K]; + auto phibar_view = phibar.current_view(); + for (size_t mu : range(K)) { + detail::legendre_scaling_functions(x[mu], K, &p[0]); + for (size_t i : range(K)) { + phibar_view(mu,i) = w[mu]*p[i]; + } + } + delete[] p; + // FixedTensor phi, r; + // make_phi(phi); + // mTxmq(K, K, K, r.ptr(), phi.ptr(), phibar.ptr()); + // std::cout << r << std::endl; // should be identify matrix + } + + public: + + FunctionData(std::size_t K) + : K(K) + , phi(K, K) + , phibar(K, K) + , HG(2*K, 2*K) + , HGT(2*K, 2*K) + , rm(K, K) + , r0(K, K) + , rp(K, K) + { + make_phi(); + make_phibar(); + twoscale_get(K, HG.data()); + auto HG_view = HG.current_view(); + auto HGT_view = HGT.current_view(); + for (size_t i : range(2*K)) { + for (size_t j : range(2*K)) { + HGT_view(j,i) = HG_view(i,j); + } + } + make_abgv_diff_operator(); + } + + const auto& get_phi() const {return phi;} + const auto& get_phibar() const {return phibar;} + const auto& get_hg() const {return HG;} + const auto& get_hgT() const {return HGT;} + const auto& get_rm() const {return rm;} + const auto& get_r0() const {return r0;} + const auto& get_rp() const {return rp;} + + /// Set X(d,mu) to be the mu'th quadrature point in dimension d for the box described by key + void make_quadrature_pts(const Key& key, TensorView& X) { + const Level n = key.level(); + const std::array& l = key.translation(); + const T h = std::pow(T(0.5),T(n)); + /* retrieve x[] from constant memory */ + const T *x, *w; + detail::GLget(&x, &w, K); +#ifdef __CUDA_ARCH__ + if (blockIdx.z == 0) { + for (int d = blockIdx.y; d < x.Dim(0); d += blockDim.y) { + T lo, hi; std::tie(lo,hi) = Domain::get(d); + T width = h*Domain::get_width(d); + for (int i = blockIdx.x; i < X.dim(1); i += blockDim.y) { + X(d,i) = lo + width*(l[d] + x[i]); + } + } + } + /* wait for all to complete */ + __syncthreads(); +#else // __CUDA_ARCH__ + for (Dimension d : range(NDIM)) { + T lo, hi; std::tie(lo,hi) = Domain::get(d); + T width = h*Domain::get_width(d); + for (size_t i : X.dim(1)) { + X(d,i) = lo + width*(l[d] + x[i]); + } + } +#endif // __CUDA_ARCH__ + } + }; + +} + + +#endif diff --git a/examples/madness/mra-device/functionfunctor.h b/examples/madness/mra-device/functionfunctor.h new file mode 100644 index 000000000..6d0d8d6b4 --- /dev/null +++ b/examples/madness/mra-device/functionfunctor.h @@ -0,0 +1,114 @@ +#ifndef MAD_FUNCTION_FUNCTOR_H_INCL +#define MAD_FUNCTION_FUNCTOR_H_INCL + +#include "tensor.h" + +#include "../../mratypes.h" + +namespace mra { + + + /// Function functor is going away ... don't use! + /// \code + ///template + /// class FunctionFunctor { + ///public: + /// T operator()(const Coordinate& r) const; + /// template void operator()(const SimpleTensor& x, FixedTensor& values) const; + /// Level initial_level() const; + /// bool is_negligible(const std::pair,Coordinate>& box, T thresh) const; + /// special point interface to be added + /// } + /// \endcode + + /// Adapts a simple callable to the API needed for evaluation --- implement your own for full vectorization + template + class FunctionFunctor { + std::function&)> f; + + public: + static const Level default_initial_level = 3; //< needs to become user configurable + + template + FunctionFunctor(functionT f) : f(f) {} + + /// Evaluate at a single point + T operator()(const Coordinate& r) const {return f(r);} + + }; + + /** + * TODO: adapt eval_cube to CUDA + */ + + /// Evaluate at points formed by tensor product of npt points in each dimension + template void eval_cube(const functorT& f, const TensorView& x, TensorView& values) { + for (size_t i=0; i{x(0,i)}); + } + + /// Evaluate at points formed by tensor product of npt points in each dimension + template void eval_cube(const functorT& f, const TensorView& x, TensorView& values) { + for (size_t i=0; i{x(0,i),x(1,j)}); + } + } + } + + /// Evaluate at points formed by tensor product of K points in each dimension + template void eval_cube(const functorT& f, const TensorView& x, TensorView& values) { + for (size_t i=0; i{x(0,i),x(1,j),x(2,k)}); + } + } + } + } + + /// Evaluate at points formed by tensor product of K points in each dimension using vectorized form + template void eval_cube_vec(const functorT& f, const TensorView& x, T* values) { + for (size_t i=0; i void eval_cube_vec(const functorT& f, const TensorView& x, T* values) { + for (size_t i=0; i void eval_cube_vec(const functorT& f, const TensorView& x, T* values) { + for (size_t i=0; i using initial_level_t = + decltype(std::declval().initial_level()); + template using supports_initial_level = + ::mra::is_detected; + + template using is_negligible_t = + decltype(std::declval().is_negligible(std::declval(),std::declval())); + template using supports_is_negligible = + ::mra::is_detected; + } + + template Level initial_level(const functionT& f) { + if constexpr (detail::supports_initial_level()) return f.initial_level(); + else return 2; // <<<<<<<<<<<<<<< needs updating to make user configurable + } + + template + bool is_negligible(const functionT& f, const std::pair,Coordinate>& box, T thresh) { + using pairT = std::pair,Coordinate>; + if constexpr (detail::supports_is_negligible()) return f.is_negligible(box, thresh); + else return false; + } +} +#endif diff --git a/examples/madness/mra-device/functionnode.h b/examples/madness/mra-device/functionnode.h new file mode 100644 index 000000000..b64e513ea --- /dev/null +++ b/examples/madness/mra-device/functionnode.h @@ -0,0 +1,117 @@ +#ifndef HAVE_FUNCTIONNODE_H +#define HAVE_FUNCTIONNODE_H + +#include "../../mrakey.h" +#include "tensor.h" + +namespace mra { + template + class FunctionReconstructedNode { + public: // temporarily make everything public while we figure out what we are doing + using key_type = Key; + using tensor_type = Tensor; + static constexpr bool is_function_node = true; + key_type key; //< Key associated with this node to facilitate computation from otherwise unknown parent/child + mutable T sum; //< If recurring up tree (e.g., in compress) can use this to also compute a scalar reduction + bool is_leaf; //< True if node is leaf on tree (i.e., no children). + tensor_type coeffs; //< if !is_leaf these are junk (and need not be communicated) + FunctionReconstructedNode() = default; // Default initializer does nothing so that class is POD + FunctionReconstructedNode(const Key& key) : key(key), sum(0.0), is_leaf(false) {} + T normf() const {return (is_leaf ? coeffs.normf() : 0.0);} + bool has_children() const {return !is_leaf;} + /* TODO: should we make this a vector? */ + std::array neighbor_coeffs; + std::array is_neighbor_leaf; + std::array neighbor_sum; + }; + + + /// In given box return the truncation tolerance for given threshold + template + T truncate_tol(const Key& key, const T thresh) { + return thresh; // nothing clever for now + } + + /// Computes square of distance between two coordinates + template + T distancesq(const Coordinate& p, const Coordinate& q) { + T x = p[0]-q[0]; + return x*x; + } + + template + T distancesq(const Coordinate& p, const Coordinate& q) { + T x = p[0]-q[0], y = p[1]-q[1]; + return x*x + y*y; + } + + template + T distancesq(const Coordinate& p, const Coordinate& q) { + T x = p[0]-q[0], y = p[1]-q[1], z=p[2]-q[2]; + return x*x + y*y + z*z; + } + + template + void distancesq(const Coordinate& p, const TensorView& q, T* rsq, std::size_t N) { + const T x = p(0); +#ifdef __CUDA_ARCH__ + int tid = threadIdx.x*blockDim.x + threadIdx.y; + for (size_t i = tid; i < N; i += blockDim.x*blockDim.y) { + T xx = q(0,i) - x; + rsq[i] = xx*xx; + } +#else // __CUDA_ARCH__ + for (size_t i=0; i + void distancesq(const Coordinate& p, const TensorView& q, T* rsq, std::size_t N) { + const T x = p(0); + const T y = p(1); +#ifdef __CUDA_ARCH__ + int tid = threadIdx.x*blockDim.x + threadIdx.y; + for (size_t i = tid; i < N; i += blockDim.x*blockDim.y) { + T xx = q(0,i) - x; + T yy = q(1,i) - y; + rsq[i] = xx*xx + yy*yy; + } +#else // __CUDA_ARCH__ + for (size_t i=0; i + void distancesq(const Coordinate& p, const TensorView& q, T* rsq, std::size_t N) { + const T x = p(0); + const T y = p(1); + const T z = p(2); +#ifdef __CUDA_ARCH__ + int tid = threadIdx.x*blockDim.x + threadIdx.y; + for (size_t i = tid; i < N; i += blockDim.x*blockDim.y) { + T xx = q(0,i) - x; + T yy = q(1,i) - y; + T zz = q(2,i) - z; + rsq[i] = xx*xx + yy*yy + zz*zz; + } +#else // __CUDA_ARCH__ + for (size_t i=0; i + class Gaussian { + const T expnt; + const Coordinate origin; + const T fac; + const T maxr; + Level initlev; + public: + /* default construction required for ttg::Buffer */ + Gaussian() = default; + + Gaussian(T expnt, const Coordinate& origin) + : expnt(expnt) + , origin(origin) + , fac(std::pow(T(2.0*expnt/M_PI),T(0.25*NDIM))) + , maxr(std::sqrt(std::log(fac/1e-12)/expnt)) + { + // Pick initial level such that average gap between quadrature points + // will find a significant value + const int N = 6; // looking for where exp(-a*x^2) < 10**-N + const int K = 6; // typically the lowest order of the polyn + const T log10 = std::log(10.0); + const T log2 = std::log(2.0); + const T L = Domain::get_max_width(); + const T a = expnt*L*L; + double n = std::log(a/(4*K*K*(N*log10+std::log(fac))))/(2*log2); + //std::cout << expnt << " " << a << " " << n << std::endl; + initlev = Level(n<2 ? 2.0 : std::ceil(n)); + } + + /* default copy ctor and operator */ + Gaussian(const Gaussian&) = default; + Gaussian& operator=(const Gaussian&) = default; + + // T operator()(const Coordinate& r) const { + // T rsq = 0.0; + // for (auto x : r) rsq += x*x; + // return fac*std::exp(-expnt*rsq); + // } + + /** + * Evaluate function at N points x and store result in \c values + */ + void operator()(const TensorView& x, T* values, std::size_t N) const { + assert(x.dim(0) == NDIM); + assert(x.dim(1) == N); + distancesq(origin, x, values, N); +#ifdef __CUDA_ARCH__ + int tid = threadDim.x * ((threadDim.y*threadIdx.z) + threadIdx.y) + threadIdx.x; + for (size_t i = tid; i < N; i += blockDim.x*blockDim.y*blockDim.z) { + values[i] = fac * std::exp(-expnt*values[i]); + } +#else // __CUDA_ARCH__ + for (T& value : values) { + value = fac * std::exp(-expnt*value); + } +#endif // __CUDA_ARCH__ + } + + Level initial_level() const { + return this->initlev; + } + + bool is_negligible(const std::pair,Coordinate>& box, T thresh) const { + auto& lo = box.first; + auto& hi = box.second; + T rsq = 0.0; + T maxw = 0.0; // max width of box + for (Dimension d : range(NDIM)) { + maxw = std::max(maxw,hi(d)-lo(d)); + T x = T(0.5)*(hi(d)+lo(d)) - origin(d); + rsq += x*x; + } + T diagndim = T(0.5)*std::sqrt(T(NDIM)); + T boxradplusr = maxw*diagndim + maxr; + // ttg::print(box, boxradplusr, bool(boxradplusr*boxradplusr < rsq)); + return (boxradplusr*boxradplusr < rsq); + } + }; +} // namespace mra +#endif // HAVE_GAUSSIAN_H \ No newline at end of file diff --git a/examples/madness/mra-device/gl.cc b/examples/madness/mra-device/gl.cc new file mode 100644 index 000000000..c622522f5 --- /dev/null +++ b/examples/madness/mra-device/gl.cc @@ -0,0 +1,246 @@ +#include +#include +#include +#include +#include +#include "gl.h" +#include "../../mrarange.h +#include + +namespace mra { + + static bool initialized = false; // Must be initialized (GLinitialize()) single threaded before use + static double nn1[64]; // nn1[n] = n/(n+1) ... used to speed evaluation of Legendre polyn recursion + static double phi_norms[64]; // Normalization constants used in scaling functions + + // Pop quiz ... can you write a brace initializer list for std::array,std::array>,64> in c++-14? + + // Old school initializer compiled on first attempt. + + // Gauss-Legendre points and weights for n=1...64 inclusive + static const double data[128][64] = + { + { 5.00000000000000000e-01 }, { 1.00000000000000000e+00 }, + { 7.88675134594812866e-01 , 2.11324865405187107e-01 }, { 5.00000000000000000e-01 , 5.00000000000000000e-01 }, + { 8.87298334620741702e-01 , 5.00000000000000000e-01 , 1.12701665379258312e-01 }, { 2.77777777777777790e-01 , 4.44444444444444420e-01 , 2.77777777777777790e-01 }, + { 9.30568155797026231e-01 , 6.69990521792428129e-01 , 3.30009478207571871e-01 , 6.94318442029737137e-02 }, { 1.73927422568726925e-01 , 3.26072577431273047e-01 , 3.26072577431273047e-01 , 1.73927422568726925e-01 }, + { 9.53089922969332037e-01 , 7.69234655052841498e-01 , 5.00000000000000000e-01 , 2.30765344947158446e-01 , 4.69100770306680043e-02 }, { 1.18463442528094542e-01 , 2.39314335249683235e-01 , 2.84444444444444444e-01 , 2.39314335249683235e-01 , 1.18463442528094542e-01 }, + { 9.66234757101576025e-01 , 8.30604693233132241e-01 , 6.19309593041598494e-01 , 3.80690406958401562e-01 , 1.69395306766867731e-01 , 3.37652428984239888e-02 }, { 8.56622461895851783e-02 , 1.80380786524069303e-01 , 2.33956967286345519e-01 , 2.33956967286345519e-01 , 1.80380786524069303e-01 , 8.56622461895851783e-02 }, + { 9.74553956171379299e-01 , 8.70765592799697230e-01 , 7.02922575688698537e-01 , 5.00000000000000000e-01 , 2.97077424311301408e-01 , 1.29234407200302770e-01 , 2.54460438286207360e-02 }, { 6.47424830844348514e-02 , 1.39852695744638322e-01 , 1.90915025252559462e-01 , 2.08979591836734702e-01 , 1.90915025252559462e-01 , 1.39852695744638322e-01 , 6.47424830844348514e-02 }, + { 9.80144928248768088e-01 , 8.98333238706813364e-01 , 7.62766204958164495e-01 , 5.91717321247824946e-01 , 4.08282678752175110e-01 , 2.37233795041835505e-01 , 1.01666761293186636e-01 , 1.98550717512318842e-02 }, { 5.06142681451881293e-02 , 1.11190517226687241e-01 , 1.56853322938943635e-01 , 1.81341891689180995e-01 , 1.81341891689180995e-01 , 1.56853322938943635e-01 , 1.11190517226687241e-01 , 5.06142681451881293e-02 }, + { 9.84080119753813043e-01 , 9.18015553663317885e-01 , 8.06685716350295179e-01 , 6.62126711701904513e-01 , 5.00000000000000000e-01 , 3.37873288298095542e-01 , 1.93314283649704793e-01 , 8.19844463366821014e-02 , 1.59198802461869536e-02 }, { 4.06371941807872061e-02 , 9.03240803474286980e-02 , 1.30305348201467719e-01 , 1.56173538520001431e-01 , 1.65119677500629891e-01 , 1.56173538520001431e-01 , 1.30305348201467719e-01 , 9.03240803474286980e-02 , 4.06371941807872061e-02 }, + { 9.86953264258585872e-01 , 9.32531683344492213e-01 , 8.39704784149512218e-01 , 7.16697697064623607e-01 , 5.74437169490815580e-01 , 4.25562830509184420e-01 , 2.83302302935376393e-01 , 1.60295215850487782e-01 , 6.74683166555077457e-02 , 1.30467357414141404e-02 }, { 3.33356721543440690e-02 , 7.47256745752902934e-02 , 1.09543181257991021e-01 , 1.34633359654998175e-01 , 1.47762112357376435e-01 , 1.47762112357376435e-01 , 1.34633359654998175e-01 , 1.09543181257991021e-01 , 7.47256745752902934e-02 , 3.33356721543440690e-02 }, + { 9.89114329073028431e-01 , 9.43531299884047603e-01 , 8.65076002787024678e-01 , 7.59548064603405848e-01 , 6.34771577976172452e-01 , 5.00000000000000000e-01 , 3.65228422023827493e-01 , 2.40451935396594096e-01 , 1.34923997212975350e-01 , 5.64687001159523486e-02 , 1.08856709269715031e-02 }, { 2.78342835580868316e-02 , 6.27901847324523060e-02 , 9.31451054638671172e-02 , 1.16596882295995241e-01 , 1.31402272255123326e-01 , 1.36462543388950308e-01 , 1.31402272255123326e-01 , 1.16596882295995241e-01 , 9.31451054638671172e-02 , 6.27901847324523060e-02 , 2.78342835580868316e-02 }, + { 9.90780317123359566e-01 , 9.52058628185237454e-01 , 8.84951337097152346e-01 , 7.93658977143308686e-01 , 6.83915749499090064e-01 , 5.62616704255734401e-01 , 4.37383295744265543e-01 , 3.16084250500909880e-01 , 2.06341022856691286e-01 , 1.15048662902847654e-01 , 4.79413718147625734e-02 , 9.21968287664037475e-03 }, { 2.35876681932559139e-02 , 5.34696629976592133e-02 , 8.00391642716731105e-02 , 1.01583713361532962e-01 , 1.16746268269177403e-01 , 1.24573522906701387e-01 , 1.24573522906701387e-01 , 1.16746268269177403e-01 , 1.01583713361532962e-01 , 8.00391642716731105e-02 , 5.34696629976592133e-02 , 2.35876681932559139e-02 }, + { 9.92091527359294068e-01 , 9.58799199611488961e-01 , 9.00789045366654939e-01 , 8.21174669720170058e-01 , 7.24246375518223462e-01 , 6.15229157977567387e-01 , 5.00000000000000000e-01 , 3.84770842022432613e-01 , 2.75753624481776594e-01 , 1.78825330279829886e-01 , 9.92109546333450470e-02 , 4.12008003885110177e-02 , 7.90847264070592554e-03 }, { 2.02420023826579386e-02 , 4.60607499188642258e-02 , 6.94367551098936248e-02 , 8.90729903809728690e-02 , 1.03908023768444255e-01 , 1.13141590131448616e-01 , 1.16275776615436949e-01 , 1.13141590131448616e-01 , 1.03908023768444255e-01 , 8.90729903809728690e-02 , 6.94367551098936248e-02 , 4.60607499188642258e-02 , 2.02420023826579386e-02 }, + { 9.93141904348406213e-01 , 9.64217441831786704e-01 , 9.13600657534882510e-01 , 8.43646452405842684e-01 , 7.57624318179077050e-01 , 6.59556184463944928e-01 , 5.54027474353671834e-01 , 4.45972525646328166e-01 , 3.40443815536055128e-01 , 2.42375681820922950e-01 , 1.56353547594157261e-01 , 8.63993424651175040e-02 , 3.57825581682132410e-02 , 6.85809565159383079e-03 }, { 1.75597301658759301e-02 , 4.00790435798801040e-02 , 6.07592853439515926e-02 , 7.86015835790967732e-02 , 9.27691987389689110e-02 , 1.02599231860647802e-01 , 1.07631926731578897e-01 , 1.07631926731578897e-01 , 1.02599231860647802e-01 , 9.27691987389689110e-02 , 7.86015835790967732e-02 , 6.07592853439515926e-02 , 4.00790435798801040e-02 , 1.75597301658759301e-02 }, + { 9.93996259010242689e-01 , 9.68636696200352976e-01 , 9.24103291705213659e-01 , 8.62208865680085035e-01 , 7.85486086304269415e-01 , 6.97075673538781637e-01 , 6.00597046998717299e-01 , 5.00000000000000000e-01 , 3.99402953001282757e-01 , 3.02924326461218307e-01 , 2.14513913695730585e-01 , 1.37791134319914965e-01 , 7.58967082947863969e-02 , 3.13633037996470451e-02 , 6.00374098975728528e-03 }, { 1.53766209980586346e-02 , 3.51830237440540622e-02 , 5.35796102335859697e-02 , 6.97853389630771620e-02 , 8.31346029084969601e-02 , 9.30805000077811057e-02 , 9.92157426635557893e-02 , 1.01289120962780643e-01 , 9.92157426635557893e-02 , 9.30805000077811057e-02 , 8.31346029084969601e-02 , 6.97853389630771620e-02 , 5.35796102335859697e-02 , 3.51830237440540622e-02 , 1.53766209980586346e-02 }, + { 9.94700467495824969e-01 , 9.72287511536616300e-01 , 9.32815601193915822e-01 , 8.77702204177501555e-01 , 8.08938122201321885e-01 , 7.29008388828613629e-01 , 6.40801775389629458e-01 , 5.47506254918818769e-01 , 4.52493745081181287e-01 , 3.59198224610370542e-01 , 2.70991611171386315e-01 , 1.91061877798678115e-01 , 1.22297795822498487e-01 , 6.71843988060841224e-02 , 2.77124884633837103e-02 , 5.29953250417503335e-03 }, { 1.35762297058770465e-02 , 3.11267619693239468e-02 , 4.75792558412463928e-02 , 6.23144856277669384e-02 , 7.47979944082883680e-02 , 8.45782596975012679e-02 , 9.13017075224617919e-02 , 9.47253052275342511e-02 , 9.47253052275342511e-02 , 9.13017075224617919e-02 , 8.45782596975012679e-02 , 7.47979944082883680e-02 , 6.23144856277669384e-02 , 4.75792558412463928e-02 , 3.11267619693239468e-02 , 1.35762297058770465e-02 }, + { 9.95287737657208682e-01 , 9.75337760884383842e-01 , 9.40119576863492901e-01 , 8.90757001948400684e-01 , 8.28835579608345419e-01 , 7.56345268543238469e-01 , 6.75615881726938206e-01 , 5.89242090747923886e-01 , 5.00000000000000000e-01 , 4.10757909252076059e-01 , 3.24384118273061850e-01 , 2.43654731456761503e-01 , 1.71164420391654609e-01 , 1.09242998051599288e-01 , 5.98804231365070508e-02 , 2.46622391156161198e-02 , 4.71226234279133183e-03 }, { 1.20741514342739657e-02 , 2.77297646869936014e-02 , 4.25180741585895888e-02 , 5.59419235967019840e-02 , 6.75681842342627376e-02 , 7.70228805384051418e-02 , 8.40020510782250179e-02 , 8.82813526834963225e-02 , 8.97232351781032667e-02 , 8.82813526834963225e-02 , 8.40020510782250179e-02 , 7.70228805384051418e-02 , 6.75681842342627376e-02 , 5.59419235967019840e-02 , 4.25180741585895888e-02 , 2.77297646869936014e-02 , 1.20741514342739657e-02 }, + { 9.95782584210465505e-01 , 9.77911974785698912e-01 , 9.46301233248777907e-01 , 9.01852479486261571e-01 , 8.45843521530176612e-01 , 7.79885415536973770e-01 , 7.05875580731421315e-01 , 6.25943112845752769e-01 , 5.42387506520867646e-01 , 4.57612493479132354e-01 , 3.74056887154247231e-01 , 2.94124419268578685e-01 , 2.20114584463026230e-01 , 1.54156478469823388e-01 , 9.81475205137384427e-02 , 5.36987667512221281e-02 , 2.20880252143011227e-02 , 4.21741578953452670e-03 }, { 1.08080067632416559e-02 , 2.48572744474848985e-02 , 3.82128651274445258e-02 , 5.04710220531435841e-02 , 6.12776033557392297e-02 , 7.03214573353253269e-02 , 7.73423375631326210e-02 , 8.21382418729163649e-02 , 8.45711914815718002e-02 , 8.45711914815718002e-02 , 8.21382418729163649e-02 , 7.73423375631326210e-02 , 7.03214573353253269e-02 , 6.12776033557392297e-02 , 5.04710220531435841e-02 , 3.82128651274445258e-02 , 2.48572744474848985e-02 , 1.08080067632416559e-02 }, + { 9.96203421921792232e-01 , 9.80104076067415009e-01 , 9.51577951807409006e-01 , 9.11357328268571409e-01 , 8.60483088667614693e-01 , 8.00272652330840550e-01 , 7.32285370687980497e-01 , 6.58282049981814943e-01 , 5.80179322820112642e-01 , 5.00000000000000000e-01 , 4.19820677179887303e-01 , 3.41717950018185057e-01 , 2.67714629312019503e-01 , 1.99727347669159477e-01 , 1.39516911332385307e-01 , 8.86426717314285906e-02 , 4.84220481925910495e-02 , 1.98959239325849843e-02 , 3.79657807820779842e-03 }, { 9.73089411486323906e-03 , 2.24071133828497998e-02 , 3.45222713688206131e-02 , 4.57450108112249995e-02 , 5.57833227736669948e-02 , 6.43769812696681071e-02 , 7.13033510868033016e-02 , 7.63830210329298348e-02 , 7.94844216969771700e-02 , 8.05272249243918492e-02 , 7.94844216969771700e-02 , 7.63830210329298348e-02 , 7.13033510868033016e-02 , 6.43769812696681071e-02 , 5.57833227736669948e-02 , 4.57450108112249995e-02 , 3.45222713688206131e-02 , 2.24071133828497998e-02 , 9.73089411486323906e-03 }, + { 9.96564299592547442e-01 , 9.81985963638956849e-01 , 9.56117214125662973e-01 , 9.19558485911109447e-01 , 8.73165953230075398e-01 , 8.18026840363257568e-01 , 7.55433500975413508e-01 , 6.86853044357709774e-01 , 6.13892925570822534e-01 , 5.38263260566748669e-01 , 4.61736739433251331e-01 , 3.86107074429177466e-01 , 3.13146955642290226e-01 , 2.44566499024586437e-01 , 1.81973159636742488e-01 , 1.26834046769924602e-01 , 8.04415140888905811e-02 , 4.38827858743370477e-02 , 1.80140363610431058e-02 , 3.43570040745253772e-03 }, { 8.80700356957605894e-03 , 2.03007149001934693e-02 , 3.13360241670545339e-02 , 4.16383707883523774e-02 , 5.09650599086202138e-02 , 5.90972659807592060e-02 , 6.58443192245883185e-02 , 7.10480546591910206e-02 , 7.45864932363018707e-02 , 7.63766935653629186e-02 , 7.63766935653629186e-02 , 7.45864932363018707e-02 , 7.10480546591910206e-02 , 6.58443192245883185e-02 , 5.90972659807592060e-02 , 5.09650599086202138e-02 , 4.16383707883523774e-02 , 3.13360241670545339e-02 , 2.03007149001934693e-02 , 8.80700356957605894e-03 }, + { 9.96876085310194782e-01 , 9.83613419283153156e-01 , 9.60049667075200452e-01 , 9.26681682291658593e-01 , 8.84219981737838889e-01 , 8.33569402098706114e-01 , 7.75809417943609914e-01 , 7.12171060103719444e-01 , 6.44010658401200531e-01 , 5.72780927080447588e-01 , 5.00000000000000000e-01 , 4.27219072919552467e-01 , 3.55989341598799469e-01 , 2.87828939896280611e-01 , 2.24190582056390086e-01 , 1.66430597901293831e-01 , 1.15780018262161041e-01 , 7.33183177083413518e-02 , 3.99503329247995823e-02 , 1.63865807168468540e-02 , 3.12391468980525002e-03 }, { 8.00861412888716727e-03 , 1.84768948854262469e-02 , 2.85672127134286025e-02 , 3.80500568141896520e-02 , 4.67222117280169311e-02 , 5.43986495835741893e-02 , 6.09157080268642667e-02 , 6.61344693166687342e-02 , 6.99436973955365748e-02 , 7.22622019949850231e-02 , 7.30405668248452072e-02 , 7.22622019949850231e-02 , 6.99436973955365748e-02 , 6.61344693166687342e-02 , 6.09157080268642667e-02 , 5.43986495835741893e-02 , 4.67222117280169311e-02 , 3.80500568141896520e-02 , 2.85672127134286025e-02 , 1.84768948854262469e-02 , 8.00861412888716727e-03 }, + { 9.97147292741199620e-01 , 9.85030248917714402e-01 , 9.63478386093586936e-01 , 9.32906288860150035e-01 , 8.93908402989604056e-01 , 8.47243631593341373e-01 , 7.93820201753455801e-01 , 7.34677918993378531e-01 , 6.70967910446042093e-01 , 6.03930213344110678e-01 , 5.34869636659861092e-01 , 4.65130363340138908e-01 , 3.96069786655889378e-01 , 3.29032089553957907e-01 , 2.65322081006621469e-01 , 2.06179798246544199e-01 , 1.52756368406658599e-01 , 1.06091597010395916e-01 , 6.70937111398499375e-02 , 3.65216139064130016e-02 , 1.49697510822856365e-02 , 2.85270725880035388e-03 }, { 7.31399764913609994e-03 , 1.68874507924070758e-02 , 2.61466675763416430e-02 , 3.48982342122602443e-02 , 4.29708031085338643e-02 , 5.02070722214404824e-02 , 5.64661480402696078e-02 , 6.16261884052562089e-02 , 6.55867523935311780e-02 , 6.82707491730075861e-02 , 6.96259364278159903e-02 , 6.96259364278159903e-02 , 6.82707491730075861e-02 , 6.55867523935311780e-02 , 6.16261884052562089e-02 , 5.64661480402696078e-02 , 5.02070722214404824e-02 , 4.29708031085338643e-02 , 3.48982342122602443e-02 , 2.61466675763416430e-02 , 1.68874507924070758e-02 , 7.31399764913609994e-03 }, + { 9.97384667498776079e-01 , 9.86271235609057606e-01 , 9.66485543413008075e-01 , 9.38376179135220867e-01 , 9.02444200809419894e-01 , 8.59330681565975141e-01 , 8.09804937881823061e-01 , 7.54750738923003706e-01 , 6.95150519015145463e-01 , 6.32067840485172505e-01 , 5.66628412149233096e-01 , 5.00000000000000000e-01 , 4.33371587850766959e-01 , 3.67932159514827550e-01 , 3.04849480984854593e-01 , 2.45249261076996239e-01 , 1.90195062118176911e-01 , 1.40669318434024915e-01 , 9.75557991905800503e-02 , 6.16238208647791677e-02 , 3.35144565869919461e-02 , 1.37287643909423836e-02 , 2.61533250122393838e-03 }, { 6.70592974357088565e-03 , 1.54940029284897224e-02 , 2.40188358655423345e-02 , 3.21162107042629250e-02 , 3.96407058883594746e-02 , 4.64578830300175771e-02 , 5.24460457322707060e-02 , 5.74983201112056821e-02 , 6.15245421533647668e-02 , 6.44528610940410807e-02 , 6.62310197023483066e-02 , 6.68272860930530926e-02 , 6.62310197023483066e-02 , 6.44528610940410807e-02 , 6.15245421533647668e-02 , 5.74983201112056821e-02 , 5.24460457322707060e-02 , 4.64578830300175771e-02 , 3.96407058883594746e-02 , 3.21162107042629250e-02 , 2.40188358655423345e-02 , 1.54940029284897224e-02 , 6.70592974357088565e-03 }, + { 9.97593609998510655e-01 , 9.87364277985654737e-01 , 9.69137276001366343e-01 , 9.43207763502200480e-01 , 9.10000992986951474e-01 , 8.70062095789277179e-01 , 8.24046825968487773e-01 , 7.72710735694419726e-01 , 7.16896753813022536e-01 , 6.57521339848081698e-01 , 5.95559433736808197e-01 , 5.32028446431302759e-01 , 4.67971553568697185e-01 , 4.04440566263191859e-01 , 3.42478660151918302e-01 , 2.83103246186977409e-01 , 2.27289264305580219e-01 , 1.75953174031512227e-01 , 1.29937904210722821e-01 , 8.99990070130485403e-02 , 5.67922364977994851e-02 , 3.08627239986336219e-02 , 1.26357220143452510e-02 , 2.40639000148931996e-03 }, { 6.17061489999360009e-03 , 1.42656943144668317e-02 , 2.21387194087099039e-02 , 2.96492924577183917e-02 , 3.66732407055401499e-02 , 4.30950807659766372e-02 , 4.88093260520569422e-02 , 5.37221350579828172e-02 , 5.77528340268627996e-02 , 6.08352364639016957e-02 , 6.29187281734141513e-02 , 6.39690976733760797e-02 , 6.39690976733760797e-02 , 6.29187281734141513e-02 , 6.08352364639016957e-02 , 5.77528340268627996e-02 , 5.37221350579828172e-02 , 4.88093260520569422e-02 , 4.30950807659766372e-02 , 3.66732407055401499e-02 , 2.96492924577183917e-02 , 2.21387194087099039e-02 , 1.42656943144668317e-02 , 6.17061489999360009e-03 }, + { 9.97778484895249007e-01 , 9.88331960729758707e-01 , 9.71487285614487162e-01 , 9.47495998939137718e-01 , 9.16721314380417041e-01 , 8.79629631518678790e-01 , 8.36783184236734146e-01 , 7.88831465120611419e-01 , 7.36501365722857515e-01 , 6.80586152904693931e-01 , 6.21933441860494263e-01 , 5.61432346305355212e-01 , 5.00000000000000000e-01 , 4.38567653694644788e-01 , 3.78066558139505793e-01 , 3.19413847095306069e-01 , 2.63498634277142540e-01 , 2.11168534879388525e-01 , 1.63216815763265827e-01 , 1.20370368481321183e-01 , 8.32786856195830011e-02 , 5.25040010608623167e-02 , 2.85127143855128315e-02 , 1.16680392702412442e-02 , 2.22151510475095083e-03 }, { 5.69689925051314414e-03 , 1.31774933075160684e-02 , 2.04695783506531545e-02 , 2.74523479879175969e-02 , 3.40191669061784552e-02 , 4.00703501675005111e-02 , 4.55141309914818271e-02 , 5.02679745335253211e-02 , 5.42598122371318256e-02 , 5.74291295728558207e-02 , 5.97278817678923851e-02 , 6.11212214951550176e-02 , 6.15880268633577227e-02 , 6.11212214951550176e-02 , 5.97278817678923851e-02 , 5.74291295728558207e-02 , 5.42598122371318256e-02 , 5.02679745335253211e-02 , 4.55141309914818271e-02 , 4.00703501675005111e-02 , 3.40191669061784552e-02 , 2.74523479879175969e-02 , 2.04695783506531545e-02 , 1.31774933075160684e-02 , 5.69689925051314414e-03 }, + { 9.97942850572808515e-01 , 9.89192722978235461e-01 , 9.73579533330857116e-01 , 9.51318930992153478e-01 , 9.22722971394248970e-01 , 8.88192974410339398e-01 , 8.48213630209978642e-01 , 8.03346146508808978e-01 , 7.54220357412252795e-01 , 7.01525877561743116e-01 , 6.46002419742978451e-01 , 5.88429410178445078e-01 , 5.29615046714656645e-01 , 4.70384953285343410e-01 , 4.11570589821554922e-01 , 3.53997580257021549e-01 , 2.98474122438256828e-01 , 2.45779642587747149e-01 , 1.96653853491190966e-01 , 1.51786369790021358e-01 , 1.11807025589660575e-01 , 7.72770286057509886e-02 , 4.86810690078464600e-02 , 2.64204666691428766e-02 , 1.08072770217645039e-02 , 2.05714942719153549e-03 }, { 5.27568630867150321e-03 , 1.22089255463159550e-02 , 1.89811916471813828e-02 , 2.54879126485739044e-02 , 3.16370231647874200e-02 , 3.73420748828298746e-02 , 4.25229471567426173e-02 , 4.71069001779570729e-02 , 5.10295805472127106e-02 , 5.42359202642882926e-02 , 5.66809082731598302e-02 , 5.83302217426482916e-02 , 5.91607076396311396e-02 , 5.91607076396311396e-02 , 5.83302217426482916e-02 , 5.66809082731598302e-02 , 5.42359202642882926e-02 , 5.10295805472127106e-02 , 4.71069001779570729e-02 , 4.25229471567426173e-02 , 3.73420748828298746e-02 , 3.16370231647874200e-02 , 2.54879126485739044e-02 , 1.89811916471813828e-02 , 1.22089255463159550e-02 , 5.27568630867150321e-03 }, + { 9.98089631444494252e-01 , 9.89961737980750600e-01 , 9.75450278907352475e-01 , 9.54741160338745565e-01 , 9.28103954009147247e-01 , 8.95885819535254146e-01 , 8.58506736869711795e-01 , 8.16453985973247587e-01 , 7.70275782289728483e-01 , 7.20574125875013460e-01 , 6.67996951819254448e-01 , 6.13229682719768410e-01 , 5.56986292804764971e-01 , 5.00000000000000000e-01 , 4.43013707195235029e-01 , 3.86770317280231590e-01 , 3.32003048180745552e-01 , 2.79425874124986540e-01 , 2.29724217710271544e-01 , 1.83546014026752413e-01 , 1.41493263130288149e-01 , 1.04114180464745881e-01 , 7.18960459908527527e-02 , 4.52588396612544491e-02 , 2.45497210926474974e-02 , 1.00382620192493877e-02 , 1.91036855550571648e-03 }, { 4.89949802564718009e-03 , 1.13431157980903117e-02 , 1.76485268787098561e-02 , 2.37247062603075307e-02 , 2.94917684299167981e-02 , 3.48744118831227981e-02 , 3.98024338865288832e-02 , 4.42115792718784720e-02 , 4.80443636850142533e-02 , 5.12508189088728972e-02 , 5.37891428942665895e-02 , 5.56262441784225944e-02 , 5.67381730544825741e-02 , 5.71104336894784903e-02 , 5.67381730544825741e-02 , 5.56262441784225944e-02 , 5.37891428942665895e-02 , 5.12508189088728972e-02 , 4.80443636850142533e-02 , 4.42115792718784720e-02 , 3.98024338865288832e-02 , 3.48744118831227981e-02 , 2.94917684299167981e-02 , 2.37247062603075307e-02 , 1.76485268787098561e-02 , 1.13431157980903117e-02 , 4.89949802564718009e-03 }, + { 9.98221248786977267e-01 , 9.90651582685436405e-01 , 9.77129640314469139e-01 , 9.57816513196066088e-01 , 9.32946261287197487e-01 , 9.02820685458589622e-01 , 8.67805439006815837e-01 , 8.28325547019432507e-01 , 7.84860235905700865e-01 , 7.37937112477559110e-01 , 6.88125758044539348e-01 , 6.36030813817589080e-01 , 5.82284641066690423e-01 , 5.27539644942017105e-01 , 4.72460355057982839e-01 , 4.17715358933309633e-01 , 3.63969186182410975e-01 , 3.11874241955460652e-01 , 2.62062887522440890e-01 , 2.15139764094299135e-01 , 1.71674452980567521e-01 , 1.32194560993184107e-01 , 9.71793145414104192e-02 , 6.70537387128024714e-02 , 4.21834868039339603e-02 , 2.28703596855309027e-02 , 9.34841731456362290e-03 , 1.77875121302277506e-03 }, { 4.56214129654725856e-03 , 1.05660562963856303e-02 , 1.64507138911521890e-02 , 2.21364673795021137e-02 , 2.75536728378583742e-02 , 3.26364619834998010e-02 , 3.73231071172843917e-02 , 4.15567086144506062e-02 , 4.52858721965164190e-02 , 4.84653289989649544e-02 , 5.10564837890303824e-02 , 5.30278829614232103e-02 , 5.43555961291470671e-02 , 5.50235065082375976e-02 , 5.50235065082375976e-02 , 5.43555961291470671e-02 , 5.30278829614232103e-02 , 5.10564837890303824e-02 , 4.84653289989649544e-02 , 4.52858721965164190e-02 , 4.15567086144506062e-02 , 3.73231071172843917e-02 , 3.26364619834998010e-02 , 2.75536728378583742e-02 , 2.21364673795021137e-02 , 1.64507138911521890e-02 , 1.05660562963856303e-02 , 4.56214129654725856e-03 }, + { 9.98339721130298230e-01 , 9.91272752630706577e-01 , 9.78642797889043847e-01 , 9.60590116476529365e-01 , 9.37318902460051340e-01 , 9.09092743807626169e-01 , 8.76231425867238567e-01 , 8.39107268801343231e-01 , 7.98140898569113855e-01 , 7.53796477562113765e-01 , 7.06576444087004374e-01 , 6.57015818933819995e-01 , 6.05676143083000551e-01 , 5.53139115066339615e-01 , 5.00000000000000000e-01 , 4.46860884933660385e-01 , 3.94323856916999449e-01 , 3.42984181066180005e-01 , 2.93423555912995682e-01 , 2.46203522437886180e-01 , 2.01859101430886090e-01 , 1.60892731198656741e-01 , 1.23768574132761433e-01 , 9.09072561923737754e-02 , 6.26810975399486048e-02 , 3.94098835234706069e-02 , 2.13572021109561354e-02 , 8.72724736929341230e-03 , 1.66027886970170698e-03 }, { 4.25845193937320499e-03 , 9.86604252806135354e-03 , 1.53702461010468104e-02 , 2.07010312593414181e-02 , 2.57974134512489600e-02 , 3.06015453285395679e-02 , 3.50589666275256395e-02 , 3.91191635678818928e-02 , 4.27361286830862663e-02 , 4.58688785696293802e-02 , 4.84819170472043023e-02 , 5.05456368799574798e-02 , 5.20366550388646903e-02 , 5.29380775486604713e-02 , 5.32396908591571197e-02 , 5.29380775486604713e-02 , 5.20366550388646903e-02 , 5.05456368799574798e-02 , 4.84819170472043023e-02 , 4.58688785696293802e-02 , 4.27361286830862663e-02 , 3.91191635678818928e-02 , 3.50589666275256395e-02 , 3.06015453285395679e-02 , 2.57974134512489600e-02 , 2.07010312593414181e-02 , 1.53702461010468104e-02 , 9.86604252806135354e-03 , 4.25845193937320499e-03 }, + { 9.98446742037324753e-01 , 9.91834061639873643e-01 , 9.80010932484153718e-01 , 9.63100023714637210e-01 , 9.41280267896026368e-01 , 9.14782881191384178e-01 , 8.83888716052413148e-01 , 8.48925247396657867e-01 , 8.10263091494621390e-01 , 7.68312074071009987e-01 , 7.23516884769044522e-01 , 6.76352362765439086e-01 , 6.27318463083944899e-01 , 5.76934956804291743e-01 , 5.25735921277658891e-01 , 4.74264078722341165e-01 , 4.23065043195708201e-01 , 3.72681536916055101e-01 , 3.23647637234560914e-01 , 2.76483115230955423e-01 , 2.31687925928990041e-01 , 1.89736908505378554e-01 , 1.51074752603342105e-01 , 1.16111283947586907e-01 , 8.52171188086157938e-02 , 5.87197321039736597e-02 , 3.68999762853628385e-02 , 1.99890675158462434e-02 , 8.16593836012639504e-03 , 1.55325796267522984e-03 }, { 3.98409624808330250e-03 , 9.23323415554547916e-03 , 1.43923539416616845e-02 , 1.93995962848135250e-02 , 2.42013364152970263e-02 , 2.87465781088095326e-02 , 3.29871149410902453e-02 , 3.68779873688526022e-02 , 4.03779476147101066e-02 , 4.34498936005414879e-02 , 4.60612611188930612e-02 , 4.81843685873221267e-02 , 4.97967102933976336e-02 , 5.08811948742027495e-02 , 5.14263264467794204e-02 , 5.14263264467794204e-02 , 5.08811948742027495e-02 , 4.97967102933976336e-02 , 4.81843685873221267e-02 , 4.60612611188930612e-02 , 4.34498936005414879e-02 , 4.03779476147101066e-02 , 3.68779873688526022e-02 , 3.29871149410902453e-02 , 2.87465781088095326e-02 , 2.42013364152970263e-02 , 1.93995962848135250e-02 , 1.43923539416616845e-02 , 9.23323415554547916e-03 , 3.98409624808330250e-03 }, + { 9.98543740909738520e-01 , 9.92342954832576174e-01 , 9.81251962546474843e-01 , 9.65378498948324060e-01 , 9.44880014974135540e-01 , 9.19960160073133637e-01 , 8.90866574208312501e-01 , 8.57888392293426616e-01 , 8.21353361462130227e-01 , 7.81624580703574656e-01 , 7.39096891022451241e-01 , 6.94192950804116471e-01 , 6.47359034990850790e-01 , 5.99060599667785354e-01 , 5.49777656076170795e-01 , 5.00000000000000000e-01 , 4.50222343923829260e-01 , 4.00939400332214702e-01 , 3.52640965009149210e-01 , 3.05807049195883529e-01 , 2.60903108977548759e-01 , 2.18375419296425372e-01 , 1.78646638537869829e-01 , 1.42111607706573356e-01 , 1.09133425791687527e-01 , 8.00398399268663352e-02 , 5.51199850258644805e-02 , 3.46215010516759195e-02 , 1.87480374535251675e-02 , 7.65704516742375836e-03 , 1.45625909026146291e-03 }, { 3.73541578962438775e-03 , 8.65931039515529036e-03 , 1.35045095924897114e-02 , 1.82161369561927335e-02 , 2.27468537636005518e-02 , 2.70515412124584277e-02 , 3.10873932805142139e-02 , 3.48142916177051828e-02 , 3.81951932993883081e-02 , 4.11964958807946313e-02 , 4.37883703042389397e-02 , 4.59450569468207379e-02 , 4.76451214561597544e-02 , 4.88716676931643598e-02 , 4.96125056133361539e-02 , 4.98602723967132289e-02 , 4.96125056133361539e-02 , 4.88716676931643598e-02 , 4.76451214561597544e-02 , 4.59450569468207379e-02 , 4.37883703042389397e-02 , 4.11964958807946313e-02 , 3.81951932993883081e-02 , 3.48142916177051828e-02 , 3.10873932805142139e-02 , 2.70515412124584277e-02 , 2.27468537636005518e-02 , 1.82161369561927335e-02 , 1.35045095924897114e-02 , 8.65931039515529036e-03 , 3.73541578962438775e-03 }, + { 9.98631930924740785e-01 , 9.92805755772634191e-01 , 9.82381127793753195e-01 , 9.67453037968869833e-01 , 9.48160577883026101e-01 , 9.24683806866284930e-01 , 8.97241897983971137e-01 , 8.66091059370144856e-01 , 8.31522133465107616e-01 , 7.93857878620381152e-01 , 7.53449954466114735e-01 , 7.10675638065317639e-01 , 6.65934301141063778e-01 , 6.19643681126068491e-01 , 5.72235980791398258e-01 , 5.24153832843869183e-01 , 4.75846167156130817e-01 , 4.27764019208601742e-01 , 3.80356318873931454e-01 , 3.34065698858936166e-01 , 2.89324361934682306e-01 , 2.46550045533885293e-01 , 2.06142121379618848e-01 , 1.68477866534892384e-01 , 1.33908940629855144e-01 , 1.02758102016028793e-01 , 7.53161931337150148e-02 , 5.18394221169739405e-02 , 3.25469620311301527e-02 , 1.76188722062467842e-02 , 7.19424422736583257e-03 , 1.36806907525921810e-03 }, { 3.50930500473504818e-03 , 8.13719736545283519e-03 , 1.26960326546310294e-02 , 1.71369314565107157e-02 , 2.14179490111133415e-02 , 2.54990296311880874e-02 , 2.93420467392677721e-02 , 3.29111113881809247e-02 , 3.61728970544242523e-02 , 3.90969478935351555e-02 , 4.16559621134733743e-02 , 4.38260465022019055e-02 , 4.55869393478819385e-02 , 4.69221995404022832e-02 , 4.78193600396374305e-02 , 4.82700442573638991e-02 , 4.82700442573638991e-02 , 4.78193600396374305e-02 , 4.69221995404022832e-02 , 4.55869393478819385e-02 , 4.38260465022019055e-02 , 4.16559621134733743e-02 , 3.90969478935351555e-02 , 3.61728970544242523e-02 , 3.29111113881809247e-02 , 2.93420467392677721e-02 , 2.54990296311880874e-02 , 2.14179490111133415e-02 , 1.71369314565107157e-02 , 1.26960326546310294e-02 , 8.13719736545283519e-03 , 3.50930500473504818e-03 }, + { 9.98712347123227540e-01 , 9.93227863115321297e-01 , 9.83411454844996369e-01 , 9.69347186305584141e-01 , 9.51158383871716806e-01 , 9.29004826338251988e-01 , 9.03081178137083329e-01 , 8.73615248224781094e-01 , 8.40865979984871448e-01 , 8.05121172918189520e-01 , 7.66694952393173867e-01 , 7.25925008636225333e-01 , 6.83169628874036650e-01 , 6.38804548576248465e-01 , 5.93219649413995742e-01 , 5.46815532927366732e-01 , 5.00000000000000000e-01 , 4.53184467072633324e-01 , 4.06780350586004202e-01 , 3.61195451423751479e-01 , 3.16830371125963350e-01 , 2.74074991363774667e-01 , 2.33305047606826188e-01 , 1.94878827081810480e-01 , 1.59134020015128608e-01 , 1.26384751775218906e-01 , 9.69188218629166987e-02 , 7.09951736617479706e-02 , 4.88416161282832079e-02 , 3.06528136944158244e-02 , 1.65885451550036173e-02 , 6.77213688467875625e-03 , 1.28765287677239126e-03 }, { 3.30311392379368900e-03 , 7.66085075646733785e-03 , 1.19577740508747393e-02 , 1.61501793161644772e-02 , 2.02007706658347969e-02 , 2.40738714093558480e-02 , 2.77354233158317795e-02 , 3.11532412651587404e-02 , 3.42972864093283591e-02 , 3.71399274219770745e-02 , 3.96561823974433680e-02 , 4.18239380335193520e-02 , 4.36241438094221654e-02 , 4.50409793303192876e-02 , 4.60619933216584246e-02 , 4.66782130327980591e-02 , 4.68842230801049947e-02 , 4.66782130327980591e-02 , 4.60619933216584246e-02 , 4.50409793303192876e-02 , 4.36241438094221654e-02 , 4.18239380335193520e-02 , 3.96561823974433680e-02 , 3.71399274219770745e-02 , 3.42972864093283591e-02 , 3.11532412651587404e-02 , 2.77354233158317795e-02 , 2.40738714093558480e-02 , 2.02007706658347969e-02 , 1.61501793161644772e-02 , 1.19577740508747393e-02 , 7.66085075646733785e-03 , 3.30311392379368900e-03 }, + { 9.98785876895420976e-01 , 9.93613908203154761e-01 , 9.84354131266672150e-01 , 9.71081198702553494e-01 , 9.53904838859162219e-01 , 9.32967319167282261e-01 , 9.08442113950466812e-01 , 8.80532438314936439e-01 , 8.49469556608131393e-01 , 8.15510863540264253e-01 , 7.78937750334873336e-01 , 7.40053272595163514e-01 , 6.99179638879322995e-01 , 6.56655540669731641e-01 , 6.12833345808224683e-01 , 5.68076178629591477e-01 , 5.22754910976551246e-01 , 4.77245089023448754e-01 , 4.31923821370408523e-01 , 3.87166654191775261e-01 , 3.43344459330268359e-01 , 3.00820361120677005e-01 , 2.59946727404836486e-01 , 2.21062249665126664e-01 , 1.84489136459735720e-01 , 1.50530443391868551e-01 , 1.19467561685063492e-01 , 9.15578860495331603e-02 , 6.70326808327177670e-02 , 4.60951611408377676e-02 , 2.89188012974464538e-02 , 1.56458687333278605e-02 , 6.38609179684525730e-03 , 1.21412310457904042e-03 }, { 3.11457027795434237e-03 , 7.22508137429751784e-03 , 1.12818609927474844e-02 , 1.52456903192230656e-02 , 1.90832968981937585e-02 , 2.27628057616766355e-02 , 2.62537072863390543e-02 , 2.95270679137622470e-02 , 3.25557607770382076e-02 , 3.53146879071278633e-02 , 3.77809873300159679e-02 , 3.99342221698859232e-02 , 4.17565498499228305e-02 , 4.32328698735178762e-02 , 4.43509489178469316e-02 , 4.51015221853203613e-02 , 4.54783701651299346e-02 , 4.54783701651299346e-02 , 4.51015221853203613e-02 , 4.43509489178469316e-02 , 4.32328698735178762e-02 , 4.17565498499228305e-02 , 3.99342221698859232e-02 , 3.77809873300159679e-02 , 3.53146879071278633e-02 , 3.25557607770382076e-02 , 2.95270679137622470e-02 , 2.62537072863390543e-02 , 2.27628057616766355e-02 , 1.90832968981937585e-02 , 1.52456903192230656e-02 , 1.12818609927474844e-02 , 7.22508137429751784e-03 , 3.11457027795434237e-03 }, + { 9.98853284549800158e-01 , 9.93967882221925780e-01 , 9.85218808019614922e-01 , 9.72672574103913612e-01 , 9.56427130679658788e-01 , 9.36609562512611182e-01 , 9.13374949546112758e-01 , 8.86905126143456290e-01 , 8.57407250778314367e-01 , 8.25112182332945143e-01 , 7.90272672374882301e-01 , 7.53161386620744278e-01 , 7.14068770758907068e-01 , 6.73300777215406931e-01 , 6.31176470604647988e-01 , 5.88025530582994782e-01 , 5.44185671637829604e-01 , 5.00000000000000000e-01 , 4.55814328362170396e-01 , 4.11974469417005218e-01 , 3.68823529395351957e-01 , 3.26699222784593013e-01 , 2.85931229241092877e-01 , 2.46838613379255695e-01 , 2.09727327625117754e-01 , 1.74887817667054801e-01 , 1.42592749221685605e-01 , 1.13094873856543723e-01 , 8.66250504538872979e-02 , 6.33904374873888316e-02 , 4.35728693203411913e-02 , 2.73274258960863360e-02 , 1.47811919803850830e-02 , 6.03211777807425090e-03 , 1.14671545019985133e-03 }, { 2.94171671022154264e-03 , 6.82541417418074635e-03 , 1.06614899557417910e-02 , 1.44146300544471268e-02 , 1.80550579317316912e-02 , 2.15542111630851081e-02 , 2.48846852006767635e-02 , 2.80204081061850643e-02 , 3.09368359830400931e-02 , 3.36111426345434491e-02 , 3.60223973862800334e-02 , 3.81517285777210266e-02 , 3.99824711211621345e-02 , 4.15002968644282919e-02 , 4.26933266960495619e-02 , 4.35522234985917661e-02 , 4.40702652151377314e-02 , 4.42433974535521440e-02 , 4.40702652151377314e-02 , 4.35522234985917661e-02 , 4.26933266960495619e-02 , 4.15002968644282919e-02 , 3.99824711211621345e-02 , 3.81517285777210266e-02 , 3.60223973862800334e-02 , 3.36111426345434491e-02 , 3.09368359830400931e-02 , 2.80204081061850643e-02 , 2.48846852006767635e-02 , 2.15542111630851081e-02 , 1.80550579317316912e-02 , 1.44146300544471268e-02 , 1.06614899557417910e-02 , 6.82541417418074635e-03 , 2.94171671022154264e-03 }, + { 9.98915231242042956e-01 , 9.94293239451106148e-01 , 9.86013845524848942e-01 , 9.74136492199753734e-01 , 9.58748887257829585e-01 , 9.39964900445198537e-01 , 9.17923583496237594e-01 , 8.92788115066103227e-01 , 8.64744585796778265e-01 , 8.34000618292760509e-01 , 8.00783829067990283e-01 , 7.65340142963122583e-01 , 7.27931972216710133e-01 , 6.88836273559844559e-01 , 6.48342497672014129e-01 , 6.06750446158432766e-01 , 5.64368051904692414e-01 , 5.21509099236854290e-01 , 4.78490900763145710e-01 , 4.35631948095307586e-01 , 3.93249553841567234e-01 , 3.51657502327985871e-01 , 3.11163726440155386e-01 , 2.72068027783289867e-01 , 2.34659857036877417e-01 , 1.99216170932009717e-01 , 1.65999381707239463e-01 , 1.35255414203221708e-01 , 1.07211884933896745e-01 , 8.20764165037623505e-02 , 6.00350995548014355e-02 , 4.12511127421704704e-02 , 2.58635078002462278e-02 , 1.39861544751510251e-02 , 5.70676054889388083e-03 , 1.08476875795708192e-03 }, { 2.78285983212252274e-03 , 6.45797364203278684e-03 , 1.00907576488677361e-02 , 1.36493107492843893e-02 , 1.71069053851536160e-02 , 2.04378754618224460e-02 , 2.36175417451329889e-02 , 2.66223569888799604e-02 , 2.94300721226624096e-02 , 3.20198986775077424e-02 , 3.43726619178682247e-02 , 3.64709425028265297e-02 , 3.82992053229353341e-02 , 3.98439144560358005e-02 , 4.10936333521698532e-02 , 4.20391094898309656e-02 , 4.26733428696693118e-02 , 4.29916378351973757e-02 , 4.29916378351973757e-02 , 4.26733428696693118e-02 , 4.20391094898309656e-02 , 4.10936333521698532e-02 , 3.98439144560358005e-02 , 3.82992053229353341e-02 , 3.64709425028265297e-02 , 3.43726619178682247e-02 , 3.20198986775077424e-02 , 2.94300721226624096e-02 , 2.66223569888799604e-02 , 2.36175417451329889e-02 , 2.04378754618224460e-02 , 1.71069053851536160e-02 , 1.36493107492843893e-02 , 1.00907576488677361e-02 , 6.45797364203278684e-03 , 2.78285983212252274e-03 }, + { 9.98972291238956811e-01 , 9.94592981607159587e-01 , 9.86746515028242843e-01 , 9.75486171631047450e-01 , 9.60890718706231883e-01 , 9.43062481077743042e-01 , 9.22126493670277991e-01 , 8.98229600254951133e-01 , 8.71539416990982585e-01 , 8.42243154565479712e-01 , 8.10546304204462276e-01 , 7.76671195930790925e-01 , 7.40855438901602770e-01 , 7.03350254659163010e-01 , 6.64418714941853450e-01 , 6.24333896395682819e-01 , 5.83376965119925983e-01 , 5.41835204477384980e-01 , 5.00000000000000000e-01 , 4.58164795522615020e-01 , 4.16623034880074017e-01 , 3.75666103604317125e-01 , 3.35581285058146495e-01 , 2.96649745340836934e-01 , 2.59144561098397230e-01 , 2.23328804069209103e-01 , 1.89453695795537752e-01 , 1.57756845434520315e-01 , 1.28460583009017359e-01 , 1.01770399745048853e-01 , 7.78735063297220087e-02 , 5.69375189222569578e-02 , 3.91092812937681306e-02 , 2.45138283689525886e-02 , 1.32534849717571273e-02 , 5.40701839284040645e-03 , 1.02770876104317553e-03 }, { 2.63652863974896947e-03 , 6.11939005015377843e-03 , 9.56452224454198280e-03 , 1.29430184952794673e-02 , 1.62308199237607420e-02 , 1.94048012509672706e-02 , 2.24426823312185823e-02 , 2.53231488274123021e-02 , 2.80259939991374593e-02 , 3.05322582616129948e-02 , 3.28243614363756264e-02 , 3.48862257778501730e-02 , 3.67033886242440835e-02 , 3.82631037852646169e-02 , 3.95544309187646909e-02 , 4.05683122542325122e-02 , 4.12976361182186280e-02 , 4.17372868129313943e-02 , 4.18841804965694522e-02 , 4.17372868129313943e-02 , 4.12976361182186280e-02 , 4.05683122542325122e-02 , 3.95544309187646909e-02 , 3.82631037852646169e-02 , 3.67033886242440835e-02 , 3.48862257778501730e-02 , 3.28243614363756264e-02 , 3.05322582616129948e-02 , 2.80259939991374593e-02 , 2.53231488274123021e-02 , 2.24426823312185823e-02 , 1.94048012509672706e-02 , 1.62308199237607420e-02 , 1.29430184952794673e-02 , 9.56452224454198280e-03 , 6.11939005015377843e-03 , 2.63652863974896947e-03 }, + { 9.99024965267843790e-01 , 9.94869727133192772e-01 , 9.87423164295076705e-01 , 9.76733165466764808e-01 , 9.62870666024292166e-01 , 9.45927869502316110e-01 , 9.26017510966181123e-01 , 9.03272083802658443e-01 , 8.77842951876985356e-01 , 8.49899340189592123e-01 , 8.19627207914840894e-01 , 7.87228010523903565e-01 , 7.52917358963965500e-01 , 7.16923584716188222e-01 , 6.79486220239717498e-01 , 6.40854404895082608e-01 , 6.01285226946058349e-01 , 5.61042012668933721e-01 , 5.20392573952289106e-01 , 4.79607426047710894e-01 , 4.38957987331066279e-01 , 3.98714773053941651e-01 , 3.59145595104917392e-01 , 3.20513779760282502e-01 , 2.83076415283811778e-01 , 2.47082641036034445e-01 , 2.12771989476096463e-01 , 1.80372792085159134e-01 , 1.50100659810407822e-01 , 1.22157048123014658e-01 , 9.67279161973415846e-02 , 7.39824890338189045e-02 , 5.40721304976838901e-02 , 3.71293339757077998e-02 , 2.32668345332352026e-02 , 1.25768357049232463e-02 , 5.13027286680721364e-03 , 9.75034732156190116e-04 }, { 2.50144037481967287e-03 , 5.80672235823433656e-03 , 9.07828885480661818e-03 , 1.22898698691161871e-02 , 1.54197502725875266e-02 , 1.84470407970123706e-02 , 2.13515792523372161e-02 , 2.41140309303793411e-02 , 2.67160099551661603e-02 , 2.91401995734986013e-02 , 3.13704666960665235e-02 , 3.33919689895702046e-02 , 3.51912535334494778e-02 , 3.67563462923717263e-02 , 3.80768317742231979e-02 , 3.91439223291054766e-02 , 3.99505166217639096e-02 , 4.04912468852985513e-02 , 4.07625146401928914e-02 , 4.07625146401928914e-02 , 4.04912468852985513e-02 , 3.99505166217639096e-02 , 3.91439223291054766e-02 , 3.80768317742231979e-02 , 3.67563462923717263e-02 , 3.51912535334494778e-02 , 3.33919689895702046e-02 , 3.13704666960665235e-02 , 2.91401995734986013e-02 , 2.67160099551661603e-02 , 2.41140309303793411e-02 , 2.13515792523372161e-02 , 1.84470407970123706e-02 , 1.54197502725875266e-02 , 1.22898698691161871e-02 , 9.07828885480661818e-03 , 5.80672235823433656e-03 , 2.50144037481967287e-03 }, + { 9.99073691533216457e-01 , 9.95125768427343016e-01 , 9.88049354666735491e-01 , 9.77887606162326173e-01 , 9.64704574243369084e-01 , 9.48583559646496433e-01 , 9.29626468999953048e-01 , 9.07953148715071601e-01 , 8.83700621465531744e-01 , 8.57022217947267295e-01 , 8.28086606716005424e-01 , 7.97076727478639002e-01 , 7.64188634330218775e-01 , 7.29630256154568002e-01 , 6.93620081985780734e-01 , 6.56385779624092947e-01 , 6.18162756230917876e-01 , 5.79192669998918941e-01 , 5.39721902304377776e-01 , 5.00000000000000000e-01 , 4.60278097695622279e-01 , 4.20807330001081115e-01 , 3.81837243769082124e-01 , 3.43614220375907053e-01 , 3.06379918014219266e-01 , 2.70369743845431998e-01 , 2.35811365669781253e-01 , 2.02923272521360998e-01 , 1.71913393283994548e-01 , 1.42977782052732649e-01 , 1.16299378534468256e-01 , 9.20468512849284409e-02 , 7.03735310000469239e-02 , 5.14164403535035536e-02 , 3.52954257566308882e-02 , 2.21123938376738619e-02 , 1.19506453332644726e-02 , 4.87423157265700832e-03 , 9.26308466783546964e-04 }, { 2.37647234581755051e-03 , 5.51739446958229678e-03 , 8.62811454686245906e-03 , 1.16846924160890816e-02 , 1.46674779919516891e-02 , 1.75575557490656661e-02 , 2.03366384239669212e-02 , 2.29871505544583174e-02 , 2.54923326460647012e-02 , 2.78363451704581495e-02 , 3.00043680442980756e-02 , 3.19826940693411915e-02 , 3.37588154831156353e-02 , 3.53215029853043774e-02 , 3.66608767071343114e-02 , 3.77684686614180309e-02 , 3.86372762723410090e-02 , 3.92618066436855873e-02 , 3.96381112841842354e-02 , 3.97638110697214262e-02 , 3.96381112841842354e-02 , 3.92618066436855873e-02 , 3.86372762723410090e-02 , 3.77684686614180309e-02 , 3.66608767071343114e-02 , 3.53215029853043774e-02 , 3.37588154831156353e-02 , 3.19826940693411915e-02 , 3.00043680442980756e-02 , 2.78363451704581495e-02 , 2.54923326460647012e-02 , 2.29871505544583174e-02 , 2.03366384239669212e-02 , 1.75575557490656661e-02 , 1.46674779919516891e-02 , 1.16846924160890816e-02 , 8.62811454686245906e-03 , 5.51739446958229678e-03 , 2.37647234581755051e-03 }, + { 9.99118854855279626e-01 , 9.95363119349728542e-01 , 9.88629974991887095e-01 , 9.78958409606895841e-01 , 9.66406404139338315e-01 , 9.51049403484437117e-01 , 9.32979751606129781e-01 , 9.12306115416655850e-01 , 8.89152825713259709e-01 , 8.63659127594963549e-01 , 8.35978342307089783e-01 , 8.06276944833990150e-01 , 7.74733562547564092e-01 , 7.41537900843089348e-01 , 7.06889602185802435e-01 , 6.70997045412879189e-01 , 6.34076092503626843e-01 , 5.96348790350685554e-01 , 5.58042035337627640e-01 , 5.19386208753025436e-01 , 4.80613791246974564e-01 , 4.41957964662372416e-01 , 4.03651209649314446e-01 , 3.65923907496373157e-01 , 3.29002954587120755e-01 , 2.93110397814197510e-01 , 2.58462099156910652e-01 , 2.25266437452435908e-01 , 1.93723055166009878e-01 , 1.64021657692910217e-01 , 1.36340872405036451e-01 , 1.10847174286740305e-01 , 8.76938845833441644e-02 , 6.70202483938702465e-02 , 4.89505965155628484e-02 , 3.35935958606617333e-02 , 2.10415903931041731e-02 , 1.13700250081128686e-02 , 4.63688065027149671e-03 , 8.81145144720399788e-04 }, { 2.26063854926659546e-03 , 5.24914226557640640e-03 , 8.21052919095394476e-03 , 1.11229245970834792e-02 , 1.39685034900116998e-02 , 1.67300976412739222e-02 , 1.93910839872360082e-02 , 2.19354540928366343e-02 , 2.43479038175361158e-02 , 2.66139234919684116e-02 , 2.87198845496957761e-02 , 3.06531212464644688e-02 , 3.24020067283005211e-02 , 3.39560229076169492e-02 , 3.53058236956433902e-02 , 3.64432911979020308e-02 , 3.73615845289841306e-02 , 3.80551809503131208e-02 , 3.85199090821239792e-02 , 3.87529739892124026e-02 , 3.87529739892124026e-02 , 3.85199090821239792e-02 , 3.80551809503131208e-02 , 3.73615845289841306e-02 , 3.64432911979020308e-02 , 3.53058236956433902e-02 , 3.39560229076169492e-02 , 3.24020067283005211e-02 , 3.06531212464644688e-02 , 2.87198845496957761e-02 , 2.66139234919684116e-02 , 2.43479038175361158e-02 , 2.19354540928366343e-02 , 1.93910839872360082e-02 , 1.67300976412739222e-02 , 1.39685034900116998e-02 , 1.11229245970834792e-02 , 8.21052919095394476e-03 , 5.24914226557640640e-03 , 2.26063854926659546e-03 }, + { 9.99160794287385690e-01 , 9.95583554849508112e-01 , 9.89169336780541641e-01 , 9.79953445865173078e-01 , 9.67988493748926926e-01 , 9.53342972379050524e-01 , 9.36100755846220656e-01 , 9.16360600200680664e-01 , 8.94235572523704669e-01 , 8.69852401534963127e-01 , 8.43350751017475586e-01 , 8.14882419536098190e-01 , 7.84610470805107929e-01 , 7.52708299599702979e-01 , 7.19358638525703586e-01 , 6.84752511320240731e-01 , 6.49088138670912418e-01 , 6.12569802816711362e-01 , 5.75406677431996028e-01 , 5.37811629494581500e-01 , 5.00000000000000000e-01 , 4.62188370505418500e-01 , 4.24593322568003917e-01 , 3.87430197183288638e-01 , 3.50911861329087582e-01 , 3.15247488679759269e-01 , 2.80641361474296469e-01 , 2.47291700400296993e-01 , 2.15389529194892071e-01 , 1.85117580463901837e-01 , 1.56649248982524358e-01 , 1.30147598465036901e-01 , 1.05764427476295317e-01 , 8.36393997993193361e-02 , 6.38992441537792888e-02 , 4.66570276209494136e-02 , 3.20115062510730880e-02 , 2.00465541348268869e-02 , 1.08306632194583082e-02 , 4.41644515049184616e-03 , 8.39205712614279203e-04 }, { 2.15307017908244374e-03 , 4.99996938695297308e-03 , 7.82246920390929426e-03 , 1.06005316843897773e-02 , 1.33179496035552222e-02 , 1.59591058658496397e-02 , 1.85088583517539935e-02 , 2.09525975979548452e-02 , 2.32763241845071710e-02 , 2.54667271473087466e-02 , 2.75112596212893704e-02 , 2.93982104749359735e-02 , 3.11167712904831598e-02 , 3.26570982267637075e-02 , 3.40103683804383813e-02 , 3.51688303104087455e-02 , 3.61258484305115382e-02 , 3.68759410136117322e-02 , 3.74148115881107746e-02 , 3.77393735463579100e-02 , 3.78477678236491880e-02 , 3.77393735463579100e-02 , 3.74148115881107746e-02 , 3.68759410136117322e-02 , 3.61258484305115382e-02 , 3.51688303104087455e-02 , 3.40103683804383813e-02 , 3.26570982267637075e-02 , 3.11167712904831598e-02 , 2.93982104749359735e-02 , 2.75112596212893704e-02 , 2.54667271473087466e-02 , 2.32763241845071710e-02 , 2.09525975979548452e-02 , 1.85088583517539935e-02 , 1.59591058658496397e-02 , 1.33179496035552222e-02 , 1.06005316843897773e-02 , 7.82246920390929426e-03 , 4.99996938695297308e-03 , 2.15307017908244374e-03 }, + { 9.99199809495031177e-01 , 9.95788644170430448e-01 , 9.89671254031874059e-01 , 9.80879682669102193e-01 , 9.69461778677494057e-01 , 9.55479862452063733e-01 , 9.39010284906086401e-01 , 9.20142991630908402e-01 , 8.98981026627743707e-01 , 8.75639967844740186e-01 , 8.50247295278085624e-01 , 8.22941694434623949e-01 , 7.93872298742554605e-01 , 7.63197874965596101e-01 , 7.31085956035210982e-01 , 6.97711926021487461e-01 , 6.63258062232705781e-01 , 6.27912539671439562e-01 , 5.91868403282427291e-01 , 5.55322513604259882e-01 , 5.18474471582675900e-01 , 4.81525528417324100e-01 , 4.44677486395740063e-01 , 4.08131596717572709e-01 , 3.72087460328560438e-01 , 3.36741937767294219e-01 , 3.02288073978512484e-01 , 2.68914043964789018e-01 , 2.36802125034403843e-01 , 2.06127701257445339e-01 , 1.77058305565376078e-01 , 1.49752704721914404e-01 , 1.24360032155259759e-01 , 1.01018973372256293e-01 , 7.98570083690915422e-02 , 6.09897150939136268e-02 , 4.45201375479362740e-02 , 3.05382213225059117e-02 , 1.91203173308977549e-02 , 1.03287459681259026e-02 , 4.21135582956953976e-03 , 8.00190504968792469e-04 }, { 2.05299930232454237e-03 , 4.76811015087425134e-03 , 7.46122184867874672e-03 , 1.01139347845263221e-02 , 1.27114797630565237e-02 , 1.52396203498017333e-02 , 1.76845355487960550e-02 , 2.00328675903461290e-02 , 2.22717888859829405e-02 , 2.43890703964016221e-02 , 2.63731478495870357e-02 , 2.82131846790091914e-02 , 2.98991311137933279e-02 , 3.14217790225012894e-02 , 3.27728121824544874e-02 , 3.39448516882609741e-02 , 3.49314962462970793e-02 , 3.57273571325854924e-02 , 3.63280876219020527e-02 , 3.67304067267337636e-02 , 3.69321171160864395e-02 , 3.69321171160864395e-02 , 3.67304067267337636e-02 , 3.63280876219020527e-02 , 3.57273571325854924e-02 , 3.49314962462970793e-02 , 3.39448516882609741e-02 , 3.27728121824544874e-02 , 3.14217790225012894e-02 , 2.98991311137933279e-02 , 2.82131846790091914e-02 , 2.63731478495870357e-02 , 2.43890703964016221e-02 , 2.22717888859829405e-02 , 2.00328675903461290e-02 , 1.76845355487960550e-02 , 1.52396203498017333e-02 , 1.27114797630565237e-02 , 1.01139347845263221e-02 , 7.46122184867874672e-03 , 4.76811015087425134e-03 , 2.05299930232454237e-03 }, + { 9.99236166121253877e-01 , 9.95979778796622028e-01 , 9.90139110490127705e-01 , 9.81743306507040003e-01 , 9.70835978423818968e-01 , 9.57473953603069416e-01 , 9.41726882609308369e-01 , 9.23676858104657494e-01 , 9.03417982068469350e-01 , 8.81055873597477612e-01 , 8.56707117634478488e-01 , 8.30498656875749086e-01 , 8.02567129819800495e-01 , 7.73058158330042322e-01 , 7.42125588392867352e-01 , 7.09930688014634659e-01 , 6.76641306432151923e-01 , 6.42430999016456838e-01 , 6.07478122430259115e-01 , 5.71964904755356662e-01 , 5.36076495437293077e-01 , 5.00000000000000000e-01 , 4.63923504562706868e-01 , 4.28035095244643338e-01 , 3.92521877569740885e-01 , 3.57569000983543162e-01 , 3.23358693567848077e-01 , 2.90069311985365397e-01 , 2.57874411607132648e-01 , 2.26941841669957650e-01 , 1.97432870180199532e-01 , 1.69501343124250942e-01 , 1.43292882365521485e-01 , 1.18944126402522443e-01 , 9.65820179315306782e-02 , 7.63231418953424778e-02 , 5.82731173906915687e-02 , 4.25260463969306321e-02 , 2.91640215761810699e-02 , 1.82566934929600036e-02 , 9.86088950987233474e-03 , 4.02022120337792652e-03 , 7.63833878746143237e-04 }, { 1.95974512692206372e-03 , 4.55199831870070192e-03 , 7.12437821578824296e-03 , 9.65995071184195045e-03 , 1.21452283069194075e-02 , 1.45672066307492472e-02 , 1.69132460434301447e-02 , 1.91711110970663283e-02 , 2.13290285989910407e-02 , 2.33757473771732879e-02 , 2.53005963921950766e-02 , 2.70935401594408938e-02 , 2.87452309784552579e-02 , 3.02470576249956463e-02 , 3.15911902246980569e-02 , 3.27706210631613995e-02 , 3.37792011146825846e-02 , 3.46116720968283401e-02 , 3.52636938825425170e-02 , 3.57318671262570678e-02 , 3.60137509857109891e-02 , 3.61078758468994926e-02 , 3.60137509857109891e-02 , 3.57318671262570678e-02 , 3.52636938825425170e-02 , 3.46116720968283401e-02 , 3.37792011146825846e-02 , 3.27706210631613995e-02 , 3.15911902246980569e-02 , 3.02470576249956463e-02 , 2.87452309784552579e-02 , 2.70935401594408938e-02 , 2.53005963921950766e-02 , 2.33757473771732879e-02 , 2.13290285989910407e-02 , 1.91711110970663283e-02 , 1.69132460434301447e-02 , 1.45672066307492472e-02 , 1.21452283069194075e-02 , 9.65995071184195045e-03 , 7.12437821578824296e-03 , 4.55199831870070192e-03 , 1.95974512692206372e-03 }, + { 9.99270100318387144e-01 , 9.96158196069257929e-01 , 9.90575916538956935e-01 , 9.82549825211246564e-01 , 9.72119754559097049e-01 , 9.59337629992087937e-01 , 9.44267119143021638e-01 , 9.26983297502355197e-01 , 9.07572269822567446e-01 , 8.86130739624377939e-01 , 8.62765526830358453e-01 , 8.37593035333061176e-01 , 8.10738672951787920e-01 , 7.82336226592735384e-01 , 7.52527195694101092e-01 , 7.21460087262705718e-01 , 6.89289676007353580e-01 , 6.56176233251392960e-01 , 6.22284728464100656e-01 , 5.87784007387758378e-01 , 5.52845950854326640e-01 , 5.17644618482067664e-01 , 4.82355381517932336e-01 , 4.47154049145673360e-01 , 4.12215992612241622e-01 , 3.77715271535899344e-01 , 3.43823766748607096e-01 , 3.10710323992646420e-01 , 2.78539912737294282e-01 , 2.47472804305898852e-01 , 2.17663773407264616e-01 , 1.89261327048212080e-01 , 1.62406964666938824e-01 , 1.37234473169641491e-01 , 1.13869260375622047e-01 , 9.24277301774324989e-02 , 7.30167024976448031e-02 , 5.57328808569783965e-02 , 4.06623700079121117e-02 , 2.78802454409029510e-02 , 1.74501747887534295e-02 , 9.42408346104301603e-03 , 3.84180393074209578e-03 , 7.29899681612887550e-04 }, { 1.87270240155638880e-03 , 4.35024068376242169e-03 , 6.80979337778999261e-03 , 9.23574086840737475e-03 , 1.16157409510096055e-02 , 1.39378914106405051e-02 , 1.61906114060349111e-02 , 1.83626739069044365e-02 , 2.04432561551731104e-02 , 2.24219920409850157e-02 , 2.42890232241760179e-02 , 2.60350480458522299e-02 , 2.76513677818640280e-02 , 2.91299299387977467e-02 , 3.04633683507809852e-02 , 3.16450398666019289e-02 , 3.26690574395907193e-02 , 3.35303194531468285e-02 , 3.42245351346833274e-02 , 3.47482459307862923e-02 , 3.50988427367791081e-02 , 3.52745788946770347e-02 , 3.52745788946770347e-02 , 3.50988427367791081e-02 , 3.47482459307862923e-02 , 3.42245351346833274e-02 , 3.35303194531468285e-02 , 3.26690574395907193e-02 , 3.16450398666019289e-02 , 3.04633683507809852e-02 , 2.91299299387977467e-02 , 2.76513677818640280e-02 , 2.60350480458522299e-02 , 2.42890232241760179e-02 , 2.24219920409850157e-02 , 2.04432561551731104e-02 , 1.83626739069044365e-02 , 1.61906114060349111e-02 , 1.39378914106405051e-02 , 1.16157409510096055e-02 , 9.23574086840737475e-03 , 6.80979337778999261e-03 , 4.35024068376242169e-03 , 1.87270240155638880e-03 }, + { 9.99301822590968336e-01 , 9.96324999223601848e-01 , 9.90984357517270320e-01 , 9.83304155198447272e-01 , 9.73320845497814502e-01 , 9.61081968359500216e-01 , 9.46645835876620878e-01 , 9.30081237980332154e-01 , 9.11467110251043211e-01 , 8.90892156296953175e-01 , 8.68454424472745123e-01 , 8.44260840385600231e-01 , 8.18426697226611655e-01 , 7.91075106284676588e-01 , 7.62336410231458039e-01 , 7.32347561959817539e-01 , 7.01251471929270953e-01 , 6.69196327125301083e-01 , 6.36334884876188722e-01 , 6.02823744891631819e-01 , 5.68822602991626569e-01 , 5.34493490081572098e-01 , 5.00000000000000000e-01 , 4.65506509918427902e-01 , 4.31177397008373486e-01 , 3.97176255108368126e-01 , 3.63665115123811222e-01 , 3.30803672874698917e-01 , 2.98748528070729047e-01 , 2.67652438040182461e-01 , 2.37663589768541961e-01 , 2.08924893715323412e-01 , 1.81573302773388318e-01 , 1.55739159614399741e-01 , 1.31545575527254821e-01 , 1.09107843703046853e-01 , 8.85328897489568306e-02 , 6.99187620196678877e-02 , 5.33541641233791289e-02 , 3.89180316404998047e-02 , 2.66791545021854704e-02 , 1.66958448015526971e-02 , 9.01564248272971637e-03 , 3.67500077639812926e-03 , 6.98177409031680942e-04 }, { 1.79133157764177942e-03 , 4.16159464810912042e-03 , 6.51555249579139229e-03 , 8.83876762896879456e-03 , 1.11199237752893660e-02 , 1.33481069837888319e-02 , 1.55126874672577332e-02 , 1.76033461008045095e-02 , 1.96101183646512252e-02 , 2.15234403545824862e-02 , 2.33341938591866832e-02 , 2.50337496189760138e-02 , 2.66140083656344756e-02 , 2.80674393798932380e-02 , 2.93871163594208694e-02 , 3.05667504155332607e-02 , 3.16007200369099669e-02 , 3.24840978753617171e-02 , 3.32126742249212667e-02 , 3.37829770818037708e-02 , 3.41922886893348404e-02 , 3.44386584888306604e-02 , 3.45209124146160090e-02 , 3.44386584888306604e-02 , 3.41922886893348404e-02 , 3.37829770818037708e-02 , 3.32126742249212667e-02 , 3.24840978753617171e-02 , 3.16007200369099669e-02 , 3.05667504155332607e-02 , 2.93871163594208694e-02 , 2.80674393798932380e-02 , 2.66140083656344756e-02 , 2.50337496189760138e-02 , 2.33341938591866832e-02 , 2.15234403545824862e-02 , 1.96101183646512252e-02 , 1.76033461008045095e-02 , 1.55126874672577332e-02 , 1.33481069837888319e-02 , 1.11199237752893660e-02 , 8.83876762896879456e-03 , 6.51555249579139229e-03 , 4.16159464810912042e-03 , 1.79133157764177942e-03 }, + { 9.99331521066908923e-01 , 9.96481174453087148e-01 , 9.91366834902083438e-01 , 9.84010695926995971e-01 , 9.74446181723044869e-01 , 9.62716899403377013e-01 , 9.48876355766970936e-01 , 9.32987697433429020e-01 , 9.15123418533033028e-01 , 8.95365028537637109e-01 , 8.73802679807832994e-01 , 8.50534756010202786e-01 , 8.25667423100998832e-01 , 7.99314144856357545e-01 , 7.71595165130901317e-01 , 7.42636959194082347e-01 , 7.12571656641414197e-01 , 6.81536438510497833e-01 , 6.49672911350934967e-01 , 6.17126461103134849e-01 , 5.84045589733551807e-01 , 5.50581237652792099e-01 , 5.16886095008026070e-01 , 4.83113904991973986e-01 , 4.49418762347207901e-01 , 4.15954410266448249e-01 , 3.82873538896865095e-01 , 3.50327088649064977e-01 , 3.18463561489502167e-01 , 2.87428343358585803e-01 , 2.57363040805917653e-01 , 2.28404834869098683e-01 , 2.00685855143642428e-01 , 1.74332576899001140e-01 , 1.49465243989797159e-01 , 1.26197320192166978e-01 , 1.04634971462362877e-01 , 8.48765814669669716e-02 , 6.70123025665709665e-02 , 5.11236442330290156e-02 , 3.72831005966230214e-02 , 2.55538182769551037e-02 , 1.59893040730040292e-02 , 8.63316509791656889e-03 , 3.51882554691281772e-03 , 6.68478933091009426e-04 }, { 1.71515043405352416e-03 , 3.98494911486231129e-03 , 6.23994188549434163e-03 , 8.46675700391811940e-03 , 1.06549993770682500e-02 , 1.27946431985650061e-02 , 1.48759147761013781e-02 , 1.68893139995534500e-02 , 1.88256526786930341e-02 , 2.06760950548393642e-02 , 2.24321976386590641e-02 , 2.40859475508561002e-02 , 2.56297990035715094e-02 , 2.70567076929283772e-02 , 2.83601629219956165e-02 , 2.95342172977731583e-02 , 3.05735138623252391e-02 , 3.14733105321972559e-02 , 3.22295017335695322e-02 , 3.28386371338906038e-02 , 3.32979373842274412e-02 , 3.36053068003390881e-02 , 3.37593429245182305e-02 , 3.37593429245182305e-02 , 3.36053068003390881e-02 , 3.32979373842274412e-02 , 3.28386371338906038e-02 , 3.22295017335695322e-02 , 3.14733105321972559e-02 , 3.05735138623252391e-02 , 2.95342172977731583e-02 , 2.83601629219956165e-02 , 2.70567076929283772e-02 , 2.56297990035715094e-02 , 2.40859475508561002e-02 , 2.24321976386590641e-02 , 2.06760950548393642e-02 , 1.88256526786930341e-02 , 1.68893139995534500e-02 , 1.48759147761013781e-02 , 1.27946431985650061e-02 , 1.06549993770682500e-02 , 8.46675700391811940e-03 , 6.23994188549434163e-03 , 3.98494911486231129e-03 , 1.71515043405352416e-03 }, + { 9.99359364292106034e-01 , 9.96627605493884294e-01 , 9.91725501535811849e-01 , 9.84673393663282215e-01 , 9.75501984628854180e-01 , 9.64251346506180274e-01 , 9.50970664719262615e-01 , 9.35718007898448167e-01 , 9.18560069949951097e-01 , 8.99571877083870985e-01 , 8.78836459222719357e-01 , 8.56444486704532104e-01 , 8.32493873695166364e-01 , 8.07089349978186821e-01 , 7.80342002967332138e-01 , 7.52368791931788961e-01 , 7.23292036552427797e-01 , 6.93238882042333526e-01 , 6.62340743168867929e-01 , 6.30732729607487275e-01 , 5.98553055139555923e-01 , 5.65942433277257462e-01 , 5.33043461958177867e-01 , 5.00000000000000000e-01 , 4.66956538041822133e-01 , 4.34057566722742538e-01 , 4.01446944860444077e-01 , 3.69267270392512725e-01 , 3.37659256831132071e-01 , 3.06761117957666418e-01 , 2.76707963447572147e-01 , 2.47631208068211039e-01 , 2.19657997032667890e-01 , 1.92910650021813179e-01 , 1.67506126304833636e-01 , 1.43555513295467840e-01 , 1.21163540777280684e-01 , 1.00428122916129028e-01 , 8.14399300500489448e-02 , 6.42819921015518464e-02 , 4.90293352807373226e-02 , 3.57486534938196779e-02 , 2.44980153711457788e-02 , 1.53266063367177505e-02 , 8.27449846418814618e-03 , 3.37239450611568270e-03 , 6.40635707893945361e-04 }, { 1.64372692126400744e-03 , 3.81930814792441663e-03 , 5.98142423215616056e-03 , 8.11766657321652887e-03 , 1.02184690738342139e-02 , 1.22746058298294092e-02 , 1.42770753503216937e-02 , 1.62171177575923774e-02 , 1.80862482920874749e-02 , 1.98762930612655028e-02 , 2.15794243242397703e-02 , 2.31881945432529553e-02 , 2.46955688736805838e-02 , 2.60949558900285712e-02 , 2.73802363907651135e-02 , 2.85457901466157696e-02 , 2.95865204711694384e-02 , 3.04978765043698238e-02 , 3.12758731104608306e-02 , 3.19171083028585156e-02 , 3.24187781194728644e-02 , 3.27786888832748702e-02 , 3.29952667944052383e-02 , 3.30675648118277377e-02 , 3.29952667944052383e-02 , 3.27786888832748702e-02 , 3.24187781194728644e-02 , 3.19171083028585156e-02 , 3.12758731104608306e-02 , 3.04978765043698238e-02 , 2.95865204711694384e-02 , 2.85457901466157696e-02 , 2.73802363907651135e-02 , 2.60949558900285712e-02 , 2.46955688736805838e-02 , 2.31881945432529553e-02 , 2.15794243242397703e-02 , 1.98762930612655028e-02 , 1.80862482920874749e-02 , 1.62171177575923774e-02 , 1.42770753503216937e-02 , 1.22746058298294092e-02 , 1.02184690738342139e-02 , 8.11766657321652887e-03 , 5.98142423215616056e-03 , 3.81930814792441663e-03 , 1.64372692126400744e-03 }, + { 9.99385503626213034e-01 , 9.96765086133175382e-01 , 9.92062291861413481e-01 , 9.85295796273123581e-01 , 9.76493851580215400e-01 , 9.65693345353277222e-01 , 9.52939568357784816e-01 , 9.38286010137123982e-01 , 9.21794130812196744e-01 , 9.03533102014721257e-01 , 8.83579516257870123e-01 , 8.62017065461907261e-01 , 8.38936189816331890e-01 , 8.14433698388256744e-01 , 7.88612363041986342e-01 , 7.61580487361116498e-01 , 7.33451452375479152e-01 , 7.04343240995358388e-01 , 6.74377943146080350e-01 , 6.43681243677727832e-01 , 6.12381895197344539e-01 , 5.80611178034445841e-01 , 5.48502349604731321e-01 , 5.16190085481434635e-01 , 4.83809914518565309e-01 , 4.51497650395268624e-01 , 4.19388821965554159e-01 , 3.87618104802655461e-01 , 3.56318756322272223e-01 , 3.25622056853919650e-01 , 2.95656759004641612e-01 , 2.66548547624520793e-01 , 2.38419512638883474e-01 , 2.11387636958013658e-01 , 1.85566301611743201e-01 , 1.61063810183668055e-01 , 1.37982934538092683e-01 , 1.16420483742129835e-01 , 9.64668979852786879e-02 , 7.82058691878032286e-02 , 6.17139898628760591e-02 , 4.70604316422151628e-02 , 3.43066546467228339e-02 , 2.35061484197845692e-02 , 1.47042037268763741e-02 , 7.93770813858657096e-03 , 3.23491386682462105e-03 , 6.14496373786940710e-04 }, { 1.57667302615291925e-03 , 3.66377695063813125e-03 , 5.73861728961726995e-03 , 7.78965786147192436e-03 , 9.80808022867776449e-03 , 1.17853804196621885e-02 , 1.37132548541784739e-02 , 1.55836139163990448e-02 , 1.73886112823852176e-02 , 1.91206755329153544e-02 , 2.07725414717323739e-02 , 2.23372804283471400e-02 , 2.38083292462452356e-02 , 2.51795177769272363e-02 , 2.64450947425968336e-02 , 2.75997518499920824e-02 , 2.86386460502016070e-02 , 2.95574198491978177e-02 , 3.03522195829469404e-02 , 3.10197115799463324e-02 , 3.15570961431270100e-02 , 3.19621192923240927e-02 , 3.22330822179750440e-02 , 3.23688484063419588e-02 , 3.23688484063419588e-02 , 3.22330822179750440e-02 , 3.19621192923240927e-02 , 3.15570961431270100e-02 , 3.10197115799463324e-02 , 3.03522195829469404e-02 , 2.95574198491978177e-02 , 2.86386460502016070e-02 , 2.75997518499920824e-02 , 2.64450947425968336e-02 , 2.51795177769272363e-02 , 2.38083292462452356e-02 , 2.23372804283471400e-02 , 2.07725414717323739e-02 , 1.91206755329153544e-02 , 1.73886112823852176e-02 , 1.55836139163990448e-02 , 1.37132548541784739e-02 , 1.17853804196621885e-02 , 9.80808022867776449e-03 , 7.78965786147192436e-03 , 5.73861728961726995e-03 , 3.66377695063813125e-03 , 1.57667302615291925e-03 }, + { 9.99410075303317713e-01 , 9.96894330972083909e-01 , 9.92378947957106461e-01 , 9.85881100450777703e-01 , 9.77426829337068592e-01 , 9.67050147377905067e-01 , 9.54792827914036635e-01 , 9.40704222786504451e-01 , 9.24841059922082875e-01 , 9.07267213679927687e-01 , 8.88053447172723276e-01 , 8.67277127118701308e-01 , 8.45021912212566062e-01 , 8.21377416209618794e-01 , 7.96438847054450338e-01 , 7.70306623495862985e-01 , 7.43085970726246048e-01 , 7.14886496670788296e-01 , 6.85821750631142479e-01 , 6.56008766059874349e-01 , 6.25567589306288641e-01 , 5.94620796230906801e-01 , 5.63292998634836062e-01 , 5.31710342491343413e-01 , 5.00000000000000000e-01 , 4.68289657508656587e-01 , 4.36707001365163994e-01 , 4.05379203769093199e-01 , 3.74432410693711359e-01 , 3.43991233940125596e-01 , 3.14178249368857576e-01 , 2.85113503329211759e-01 , 2.56914029273753952e-01 , 2.29693376504136959e-01 , 2.03561152945549634e-01 , 1.78622583790381151e-01 , 1.54978087787433938e-01 , 1.32722872881298637e-01 , 1.11946552827276682e-01 , 9.27327863200722857e-02 , 7.51589400779171524e-02 , 5.92957772134955416e-02 , 4.52071720859633583e-02 , 3.29498526220949259e-02 , 2.25731706629313834e-02 , 1.41188995492223107e-02 , 7.62105204289349747e-03 , 3.10566902791610446e-03 , 5.89924696682310283e-04 }, { 1.51363949446145247e-03 , 3.51754979504322572e-03 , 5.51027551579679007e-03 , 7.48107246781232541e-03 , 9.42179792654472895e-03 , 1.13246007937233377e-02 , 1.31818094635330080e-02 , 1.49859423102919123e-02 , 1.67297333958110889e-02 , 1.84061604815003443e-02 , 2.00084728831865094e-02 , 2.15302184906297975e-02 , 2.29652696777979254e-02 , 2.43078479439141210e-02 , 2.55525471650722945e-02 , 2.66943553541294856e-02 , 2.77286748374017955e-02 , 2.86513407650937357e-02 , 2.94586378800136342e-02 , 3.01473154765760087e-02 , 3.07146004895964692e-02 , 3.11582086600286322e-02 , 3.14763537325978490e-02 , 3.16677546482458730e-02 , 3.17316407023953001e-02 , 3.16677546482458730e-02 , 3.14763537325978490e-02 , 3.11582086600286322e-02 , 3.07146004895964692e-02 , 3.01473154765760087e-02 , 2.94586378800136342e-02 , 2.86513407650937357e-02 , 2.77286748374017955e-02 , 2.66943553541294856e-02 , 2.55525471650722945e-02 , 2.43078479439141210e-02 , 2.29652696777979254e-02 , 2.15302184906297975e-02 , 2.00084728831865094e-02 , 1.84061604815003443e-02 , 1.67297333958110889e-02 , 1.49859423102919123e-02 , 1.31818094635330080e-02 , 1.13246007937233377e-02 , 9.42179792654472895e-03 , 7.48107246781232541e-03 , 5.51027551579679007e-03 , 3.51754979504322572e-03 , 1.51363949446145247e-03 }, + { 9.99433202210035510e-01 , 9.97015984716045356e-01 , 9.92677042024002976e-01 , 9.86432192553346021e-01 , 9.78305477621403963e-01 , 9.68328309472438975e-01 , 9.56539278327895981e-01 , 9.42983989761806529e-01 , 9.27714884714972987e-01 , 9.10791035429667994e-01 , 8.92277916450199604e-01 , 8.72247151113034302e-01 , 8.50776234353411098e-01 , 8.27948232842719678e-01 , 8.03851463592475168e-01 , 7.78579152257324991e-01 , 7.52229072453732051e-01 , 7.24903167487019440e-01 , 6.96707155948782519e-01 , 6.67750122709718674e-01 , 6.38144096889766033e-01 , 6.08003618438020865e-01 , 5.77445294999072933e-01 , 5.46587350780043058e-01 , 5.15549169163594390e-01 , 4.84450830836405555e-01 , 4.53412649219956942e-01 , 4.22554705000927067e-01 , 3.91996381561979135e-01 , 3.61855903110234023e-01 , 3.32249877290281326e-01 , 3.03292844051217425e-01 , 2.75096832512980616e-01 , 2.47770927546267894e-01 , 2.21420847742674981e-01 , 1.96148536407524887e-01 , 1.72051767157280322e-01 , 1.49223765646588874e-01 , 1.27752848886965725e-01 , 1.07722083549800368e-01 , 8.92089645703320194e-02 , 7.22851152850269574e-02 , 5.70160102381934777e-02 , 4.34607216721040537e-02 , 3.16716905275610319e-02 , 2.16945223785960269e-02 , 1.35678074466539633e-02 , 7.32295797599705894e-03 , 2.98401528395464367e-03 , 5.66797789964474871e-04 }, { 1.45431127657757054e-03 , 3.37989959787270058e-03 , 5.29527419182548430e-03 , 7.19041138074278698e-03 , 9.05778035674469420e-03 , 1.08901215850623970e-02 , 1.26803367850061958e-02 , 1.44214967902675986e-02 , 1.61068641117890071e-02 , 1.77299178075730757e-02 , 1.92843783062938388e-02 , 2.07642315450738482e-02 , 2.21637521694016369e-02 , 2.34775256519742168e-02 , 2.47004692247331584e-02 , 2.58278515347905684e-02 , 2.68553109444981224e-02 , 2.77788724031062598e-02 , 2.85949628238641902e-02 , 2.93004249066112221e-02 , 2.98925293521327268e-02 , 3.03689854208851091e-02 , 3.07279497951583325e-02 , 3.09680337103416213e-02 , 3.10883083276736298e-02 , 3.10883083276736298e-02 , 3.09680337103416213e-02 , 3.07279497951583325e-02 , 3.03689854208851091e-02 , 2.98925293521327268e-02 , 2.93004249066112221e-02 , 2.85949628238641902e-02 , 2.77788724031062598e-02 , 2.68553109444981224e-02 , 2.58278515347905684e-02 , 2.47004692247331584e-02 , 2.34775256519742168e-02 , 2.21637521694016369e-02 , 2.07642315450738482e-02 , 1.92843783062938388e-02 , 1.77299178075730757e-02 , 1.61068641117890071e-02 , 1.44214967902675986e-02 , 1.26803367850061958e-02 , 1.08901215850623970e-02 , 9.05778035674469420e-03 , 7.19041138074278698e-03 , 5.29527419182548430e-03 , 3.37989959787270058e-03 , 1.45431127657757054e-03 }, + { 9.99454995424451709e-01 , 9.97130630218376224e-01 , 9.92957995867951526e-01 , 9.86951684009661934e-01 , 9.79133924306954118e-01 , 9.69533772001481164e-01 , 9.58186931154890065e-01 , 9.45135609014763678e-01 , 9.30428355591146117e-01 , 9.14119881911532373e-01 , 8.96270856049690590e-01 , 8.76947677242687740e-01 , 8.56222228788518280e-01 , 8.34171610587685075e-01 , 8.10877852300361690e-01 , 7.86427608175651938e-01 , 7.60911834683092869e-01 , 7.34425452143020463e-01 , 7.07066991613151896e-01 , 6.78938228344204697e-01 , 6.50143803167665957e-01 , 6.20790833223899385e-01 , 5.90988513478538757e-01 , 5.60847710509444375e-01 , 5.30480550075289381e-01 , 5.00000000000000000e-01 , 4.69519449924710619e-01 , 4.39152289490555625e-01 , 4.09011486521461243e-01 , 3.79209166776100615e-01 , 3.49856196832334043e-01 , 3.21061771655795247e-01 , 2.92933008386848048e-01 , 2.65574547856979482e-01 , 2.39088165316907075e-01 , 2.13572391824348090e-01 , 1.89122147699638365e-01 , 1.65828389412314953e-01 , 1.43777771211481664e-01 , 1.23052322757312232e-01 , 1.03729143950309396e-01 , 8.58801180884675858e-02 , 6.95716444088538138e-02 , 5.48643909852363498e-02 , 4.18130688451098867e-02 , 3.04662279985188078e-02 , 2.08660756930459032e-02 , 1.30483159903380663e-02 , 7.04200413204850162e-03 , 2.86936978162371289e-03 , 5.45004575548252370e-04 }, { 1.39840358554494770e-03 , 3.25016889162630003e-03 , 5.09259564891086525e-03 , 6.91631700323891083e-03 , 8.71435736170052613e-03 , 1.04799942008516056e-02 , 1.22066502868907172e-02 , 1.38878992970812385e-02 , 1.55174856450800043e-02 , 1.70893466020941680e-02 , 1.85976344616301456e-02 , 2.00367381427482283e-02 , 2.14013039989400418e-02 , 2.26862557038250354e-02 , 2.38868131203115522e-02 , 2.49985100750287036e-02 , 2.60172109683485427e-02 , 2.69391261565227816e-02 , 2.77608260478693462e-02 , 2.84792538601293319e-02 , 2.90917369912960695e-02 , 2.95959969614807729e-02 , 2.99901578887516243e-02 , 3.02727534673688965e-02 , 3.04427324224281724e-02 , 3.04994624206029394e-02 , 3.04427324224281724e-02 , 3.02727534673688965e-02 , 2.99901578887516243e-02 , 2.95959969614807729e-02 , 2.90917369912960695e-02 , 2.84792538601293319e-02 , 2.77608260478693462e-02 , 2.69391261565227816e-02 , 2.60172109683485427e-02 , 2.49985100750287036e-02 , 2.38868131203115522e-02 , 2.26862557038250354e-02 , 2.14013039989400418e-02 , 2.00367381427482283e-02 , 1.85976344616301456e-02 , 1.70893466020941680e-02 , 1.55174856450800043e-02 , 1.38878992970812385e-02 , 1.22066502868907172e-02 , 1.04799942008516056e-02 , 8.71435736170052613e-03 , 6.91631700323891083e-03 , 5.09259564891086525e-03 , 3.25016889162630003e-03 , 1.39840358554494770e-03 }, + { 9.99475555551975092e-01 , 9.97238795464608030e-01 , 9.93223097825774892e-01 , 9.87441942110872217e-01 , 9.79915913466543276e-01 , 9.70671926820679487e-01 , 9.59743064458212225e-01 , 9.47168445267247638e-01 , 9.32993081423033832e-01 , 9.17267716163367219e-01 , 9.00048641715234132e-01 , 8.81397497596872470e-01 , 8.61381049874991644e-01 , 8.40070952113583846e-01 , 8.17543488847622957e-01 , 7.93879302489789551e-01 , 7.69163104642913709e-01 , 7.43483372849047974e-01 , 7.16932033859380868e-01 , 6.89604134558046811e-01 , 6.61597501717403946e-01 , 6.33012391802500907e-01 , 6.03951132078183073e-01 , 5.74517754303474626e-01 , 5.44817622324450301e-01 , 5.14957054898669386e-01 , 4.85042945101330614e-01 , 4.55182377675549699e-01 , 4.25482245696525430e-01 , 3.96048867921816983e-01 , 3.66987608197499093e-01 , 3.38402498282596109e-01 , 3.10395865441953189e-01 , 2.83067966140619187e-01 , 2.56516627150951970e-01 , 2.30836895357086291e-01 , 2.06120697510210449e-01 , 1.82456511152377043e-01 , 1.59929047886416154e-01 , 1.38618950125008411e-01 , 1.18602502403127516e-01 , 9.99513582847658399e-02 , 8.27322838366327251e-02 , 6.70069185769662096e-02 , 5.28315547327523408e-02 , 4.02569355417877334e-02 , 2.93280731793204713e-02 , 2.00840865334567242e-02 , 1.25580578891277481e-02 , 6.77690217422507925e-03 , 2.76120453539198526e-03 , 5.24444448024860913e-04 }, { 1.34565847502355566e-03 , 3.12776198148663823e-03 , 4.90131728973137570e-03 , 6.65755749117048073e-03 , 8.39001169815036842e-03 , 1.00924457539903964e-02 , 1.17587567769922314e-02 , 1.33829768732520067e-02 , 1.49592905735719730e-02 , 1.64820545448594001e-02 , 1.79458174175486165e-02 , 1.93453391552119887e-02 , 2.06756097502801342e-02 , 2.19318671295002030e-02 , 2.31096141863923951e-02 , 2.42046348720374484e-02 , 2.52130092831711894e-02 , 2.61311276919534950e-02 , 2.69557034663786312e-02 , 2.76837848346513267e-02 , 2.83127654511842984e-02 , 2.88403937262634129e-02 , 2.92647808859069353e-02 , 2.95844077330214839e-02 , 2.97981300856240798e-02 , 2.99051828726459301e-02 , 2.99051828726459301e-02 , 2.97981300856240798e-02 , 2.95844077330214839e-02 , 2.92647808859069353e-02 , 2.88403937262634129e-02 , 2.83127654511842984e-02 , 2.76837848346513267e-02 , 2.69557034663786312e-02 , 2.61311276919534950e-02 , 2.52130092831711894e-02 , 2.42046348720374484e-02 , 2.31096141863923951e-02 , 2.19318671295002030e-02 , 2.06756097502801342e-02 , 1.93453391552119887e-02 , 1.79458174175486165e-02 , 1.64820545448594001e-02 , 1.49592905735719730e-02 , 1.33829768732520067e-02 , 1.17587567769922314e-02 , 1.00924457539903964e-02 , 8.39001169815036842e-03 , 6.65755749117048073e-03 , 4.90131728973137570e-03 , 3.12776198148663823e-03 , 1.34565847502355566e-03 }, + { 9.99494973888164107e-01 , 9.97340959654003489e-01 , 9.93473517511685777e-01 , 9.87905116857492271e-01 , 9.80654847311568156e-01 , 9.71747676732220955e-01 , 9.61214301521406078e-01 , 9.49091028937713244e-01 , 9.35419648779120649e-01 , 9.20247288272900699e-01 , 9.03626249208447696e-01 , 8.85613827462766179e-01 , 8.66272115403755150e-01 , 8.45667787800683302e-01 , 8.23871871958255064e-01 , 8.00959502856884664e-01 , 7.77009664138533895e-01 , 7.52104915828566756e-01 , 7.26331109730922853e-01 , 6.99777093476976475e-01 , 6.72534404247861151e-01 , 6.44696953225813107e-01 , 6.16360701862136318e-01 , 5.87623331077662847e-01 , 5.58583904535977616e-01 , 5.29342527150129749e-01 , 5.00000000000000000e-01 , 4.70657472849870251e-01 , 4.41416095464022440e-01 , 4.12376668922337097e-01 , 3.83639298137863682e-01 , 3.55303046774186893e-01 , 3.27465595752138849e-01 , 3.00222906523023525e-01 , 2.73668890269077092e-01 , 2.47895084171433272e-01 , 2.22990335861466049e-01 , 1.99040497143115336e-01 , 1.76128128041744964e-01 , 1.54332212199316643e-01 , 1.33727884596244878e-01 , 1.14386172537233849e-01 , 9.63737507915522623e-02 , 7.97527117270993152e-02 , 6.45803512208793229e-02 , 5.09089710622866870e-02 , 3.87856984785939357e-02 , 2.82523232677790587e-02 , 1.93451526884318332e-02 , 1.20948831425077095e-02 , 6.52648248831423899e-03 , 2.65904034599646075e-03 , 5.05026111835886471e-04 }, { 1.29584186028351592e-03 , 3.01213811347433684e-03 , 4.72060114247017243e-03 , 6.41301307212018955e-03 , 8.08336262834373140e-03 , 9.72586055381844707e-03 , 1.13348365285351037e-02 , 1.29047412553787589e-02 , 1.44301618089118684e-02 , 1.59058392295096628e-02 , 1.73266862917671183e-02 , 1.86878049017414581e-02 , 1.99845029217701892e-02 , 2.12123103172600080e-02 , 2.23669945518364041e-02 , 2.34445751703751572e-02 , 2.44413375163495712e-02 , 2.53538455346463583e-02 , 2.61789536149363601e-02 , 2.69138174343655154e-02 , 2.75559037619667983e-02 , 2.81029991908698547e-02 , 2.85532177681335972e-02 , 2.89050074958565988e-02 , 2.91571556811280053e-02 , 2.93087931163601295e-02 , 2.93593970755821818e-02 , 2.93087931163601295e-02 , 2.91571556811280053e-02 , 2.89050074958565988e-02 , 2.85532177681335972e-02 , 2.81029991908698547e-02 , 2.75559037619667983e-02 , 2.69138174343655154e-02 , 2.61789536149363601e-02 , 2.53538455346463583e-02 , 2.44413375163495712e-02 , 2.34445751703751572e-02 , 2.23669945518364041e-02 , 2.12123103172600080e-02 , 1.99845029217701892e-02 , 1.86878049017414581e-02 , 1.73266862917671183e-02 , 1.59058392295096628e-02 , 1.44301618089118684e-02 , 1.29047412553787589e-02 , 1.13348365285351037e-02 , 9.72586055381844707e-03 , 8.08336262834373140e-03 , 6.41301307212018955e-03 , 4.72060114247017243e-03 , 3.01213811347433684e-03 , 1.29584186028351592e-03 }, + { 9.99513333433670437e-01 , 9.97437558509169486e-01 , 9.93710318698671768e-01 , 9.88343164428951648e-01 , 9.81353822892961802e-01 , 9.72765487582497923e-01 , 9.62606679933325715e-01 , 9.50911143142350812e-01 , 9.37717727032784443e-01 , 9.23070257985386444e-01 , 9.07017392956783963e-01 , 8.89612457673127022e-01 , 8.70913269404592127e-01 , 8.50981944859586448e-01 , 8.29884693815991614e-01 , 8.07691599165563656e-01 , 7.84476384097604673e-01 , 7.60316167192966574e-01 , 7.35291206240691109e-01 , 7.09484631627602225e-01 , 6.82982170186095638e-01 , 6.55871860417234109e-01 , 6.28243760034998600e-01 , 6.00189646803106824e-01 , 5.71802713658128070e-01 , 5.43177259131624068e-01 , 5.14408374099670884e-01 , 4.85591625900329116e-01 , 4.56822740868375876e-01 , 4.28197286341871930e-01 , 3.99810353196893231e-01 , 3.71756239965001345e-01 , 3.44128139582765891e-01 , 3.17017829813904417e-01 , 2.90515368372397720e-01 , 2.64708793759308836e-01 , 2.39683832807033453e-01 , 2.15523615902395271e-01 , 1.92308400834436316e-01 , 1.70115306184008441e-01 , 1.49018055140413552e-01 , 1.29086730595407845e-01 , 1.10387542326872992e-01 , 9.29826070432160784e-02 , 7.69297420146135280e-02 , 6.22822729672155295e-02 , 4.90888568576492088e-02 , 3.73933200666742571e-02 , 2.72345124175020735e-02 , 1.86461771070382080e-02 , 1.16568355710483813e-02 , 6.28968130132822115e-03 , 2.56244149083055756e-03 , 4.86666566329508048e-04 }, { 1.24874091788079299e-03 , 2.90280550761999254e-03 , 4.54968472775469854e-03 , 6.18166406442382209e-03 , 7.79315151796206550e-03 , 9.37876381073468948e-03 , 1.09332257114265422e-02 , 1.24513707336043871e-02 , 1.39281546552979356e-02 , 1.53586712489353384e-02 , 1.67381682321863234e-02 , 1.80620629201917772e-02 , 1.93259573910512586e-02 , 2.05256530683224879e-02 , 2.16571646547985067e-02 , 2.27167333641383577e-02 , 2.37008394032224949e-02 , 2.46062136622644430e-02 , 2.54298485730940702e-02 , 2.61690080991493733e-02 , 2.68212368237768055e-02 , 2.73843681065289932e-02 , 2.78565312802949924e-02 , 2.82361578653129823e-02 , 2.85219867793972993e-02 , 2.87130685270560564e-02 , 2.88087683535735127e-02 , 2.88087683535735127e-02 , 2.87130685270560564e-02 , 2.85219867793972993e-02 , 2.82361578653129823e-02 , 2.78565312802949924e-02 , 2.73843681065289932e-02 , 2.68212368237768055e-02 , 2.61690080991493733e-02 , 2.54298485730940702e-02 , 2.46062136622644430e-02 , 2.37008394032224949e-02 , 2.27167333641383577e-02 , 2.16571646547985067e-02 , 2.05256530683224879e-02 , 1.93259573910512586e-02 , 1.80620629201917772e-02 , 1.67381682321863234e-02 , 1.53586712489353384e-02 , 1.39281546552979356e-02 , 1.24513707336043871e-02 , 1.09332257114265422e-02 , 9.37876381073468948e-03 , 7.79315151796206550e-03 , 6.18166406442382209e-03 , 4.54968472775469854e-03 , 2.90280550761999254e-03 , 1.24874091788079299e-03 }, + { 9.99530709782409321e-01 , 9.97528988923705895e-01 , 9.93934470599444619e-01 , 9.88757867751994590e-01 , 9.82015664296567614e-01 , 9.73729434020605411e-01 , 9.63925712360395814e-01 , 9.52635900371999966e-01 , 9.39896161209947789e-01 , 9.25747303308577241e-01 , 9.10234649279660468e-01 , 8.93407890563811202e-01 , 8.75320928174010970e-01 , 8.56031699993318851e-01 , 8.35601995159913180e-01 , 8.14097256124964086e-01 , 7.91586369013016045e-01 , 7.68141442954171638e-01 , 7.43837579093737045e-01 , 7.18752630018587246e-01 , 6.92966950370489720e-01 , 6.66563139445011887e-01 , 6.39625776600403317e-01 , 6.12241150323922789e-01 , 5.84496981823436568e-01 , 5.56482144029664672e-01 , 5.28286376909168354e-01 , 5.00000000000000000e-01 , 4.71713623090831591e-01 , 4.43517855970335384e-01 , 4.15503018176563377e-01 , 3.87758849676077266e-01 , 3.60374223399596738e-01 , 3.33436860554988057e-01 , 3.07033049629510280e-01 , 2.81247369981412698e-01 , 2.56162420906262955e-01 , 2.31858557045828362e-01 , 2.08413630986983955e-01 , 1.85902743875035914e-01 , 1.64398004840086792e-01 , 1.43968300006681094e-01 , 1.24679071825989043e-01 , 1.06592109436188812e-01 , 8.97653507203395457e-02 , 7.42526966914227593e-02 , 6.01038387900522456e-02 , 4.73640996279999851e-02 , 3.60742876396041509e-02 , 2.62705659793946306e-02 , 1.79843357034323997e-02 , 1.12421322480053959e-02 , 6.06552940055540054e-03 , 2.47101107629406260e-03 , 4.69290217590729263e-04 }, { 1.20416180998989442e-03 , 2.79931613328038374e-03 , 4.38787305352926395e-03 , 5.96258035992430595e-03 , 7.51822916675589422e-03 , 9.04980726036453201e-03 , 1.05524008340082270e-02 , 1.20211940048628105e-02 , 1.34514807281981355e-02 , 1.48386788825805201e-02 , 1.61783446130929140e-02 , 1.74661864367949421e-02 , 1.86980789339827730e-02 , 1.98700759371685902e-02 , 2.09784231588593800e-02 , 2.20195702108032937e-02 , 2.29901819731419196e-02 , 2.38871492756003480e-02 , 2.47075988557758711e-02 , 2.54489025622469875e-02 , 2.61086857728160433e-02 , 2.66848350008027368e-02 , 2.71755046649555521e-02 , 2.75791230012543444e-02 , 2.78943970976420416e-02 , 2.81203170355421826e-02 , 2.82561591248860003e-02 , 2.83014882222802112e-02 , 2.82561591248860003e-02 , 2.81203170355421826e-02 , 2.78943970976420416e-02 , 2.75791230012543444e-02 , 2.71755046649555521e-02 , 2.66848350008027368e-02 , 2.61086857728160433e-02 , 2.54489025622469875e-02 , 2.47075988557758711e-02 , 2.38871492756003480e-02 , 2.29901819731419196e-02 , 2.20195702108032937e-02 , 2.09784231588593800e-02 , 1.98700759371685902e-02 , 1.86980789339827730e-02 , 1.74661864367949421e-02 , 1.61783446130929140e-02 , 1.48386788825805201e-02 , 1.34514807281981355e-02 , 1.20211940048628105e-02 , 1.05524008340082270e-02 , 9.04980726036453201e-03 , 7.51822916675589422e-03 , 5.96258035992430595e-03 , 4.38787305352926395e-03 , 2.79931613328038374e-03 , 1.20416180998989442e-03 }, + { 9.99547171900732834e-01 , 9.97615613040534921e-01 , 9.94146857770080716e-01 , 9.89150854570128191e-01 , 9.82642950952745120e-01 , 9.74643239780981330e-01 , 9.65176440123748147e-01 , 9.54271810210327698e-01 , 9.41963054163913793e-01 , 9.28288216881374306e-01 , 9.13289566071440850e-01 , 8.97013461446933280e-01 , 8.79510211352564464e-01 , 8.60833917225094059e-01 , 8.41042306347235202e-01 , 8.20196553403503392e-01 , 7.98361091385331623e-01 , 7.75603412427767314e-01 , 7.51993859192190861e-01 , 7.27605407439229745e-01 , 7.02513440463545580e-01 , 6.76795516087477234e-01 , 6.50531126933610371e-01 , 6.23801454717168635e-01 , 5.96689119317637573e-01 , 5.69277923405188124e-01 , 5.41652593411217742e-01 , 5.13898517643637698e-01 , 4.86101482356362302e-01 , 4.58347406588782313e-01 , 4.30722076594811876e-01 , 4.03310880682362372e-01 , 3.76198545282831365e-01 , 3.49468873066389685e-01 , 3.23204483912522766e-01 , 2.97486559536454365e-01 , 2.72394592560770199e-01 , 2.48006140807809139e-01 , 2.24396587572232686e-01 , 2.01638908614668350e-01 , 1.79803446596496552e-01 , 1.58957693652764770e-01 , 1.39166082774905969e-01 , 1.20489788647435550e-01 , 1.02986538553066748e-01 , 8.67104339285591774e-02 , 7.17117831186256799e-02 , 5.80369458360862275e-02 , 4.57281897896722536e-02 , 3.48235598762518528e-02 , 2.53567602190186807e-02 , 1.73570490472549077e-02 , 1.08491454298718076e-02 , 5.85314222991924465e-03 , 2.38438695946512633e-03 , 4.52828099267207798e-04 }, { 1.16192768788660780e-03 , 2.70126112300766909e-03 , 4.23453158165394347e-03 , 5.75491217019169152e-03 , 7.25754463901073614e-03 , 8.73775645570047318e-03 , 1.01909649412012856e-02 , 1.16126757812826577e-02 , 1.29984935291959751e-02 , 1.43441342369113704e-02 , 1.56454383736552224e-02 , 1.68983835578058808e-02 , 1.80990969361575944e-02 , 1.92438671296238303e-02 , 2.03291556923722583e-02 , 2.13516080423335440e-02 , 2.23080638263461403e-02 , 2.31955666865009472e-02 , 2.40113733968001300e-02 , 2.47529623415237883e-02 , 2.54180413088992418e-02 , 2.60045545758707010e-02 , 2.65106892620053831e-02 , 2.69348809328572442e-02 , 2.72758184354447118e-02 , 2.75324479508812121e-02 , 2.77039762516225613e-02 , 2.77898731532571983e-02 , 2.77898731532571983e-02 , 2.77039762516225613e-02 , 2.75324479508812121e-02 , 2.72758184354447118e-02 , 2.69348809328572442e-02 , 2.65106892620053831e-02 , 2.60045545758707010e-02 , 2.54180413088992418e-02 , 2.47529623415237883e-02 , 2.40113733968001300e-02 , 2.31955666865009472e-02 , 2.23080638263461403e-02 , 2.13516080423335440e-02 , 2.03291556923722583e-02 , 1.92438671296238303e-02 , 1.80990969361575944e-02 , 1.68983835578058808e-02 , 1.56454383736552224e-02 , 1.43441342369113704e-02 , 1.29984935291959751e-02 , 1.16126757812826577e-02 , 1.01909649412012856e-02 , 8.73775645570047318e-03 , 7.25754463901073614e-03 , 5.75491217019169152e-03 , 4.23453158165394347e-03 , 2.70126112300766909e-03 , 1.16192768788660780e-03 }, + { 9.99562782812631445e-01 , 9.97697761839215103e-01 , 9.94348288825111060e-01 , 9.89523613354734377e-01 , 9.83238042585943273e-01 , 9.75510313223938330e-01 , 9.66363480533550812e-01 , 9.55824839260695613e-01 , 9.43925839441110637e-01 , 9.30701991631023517e-01 , 9.16192760575219589e-01 , 9.00441447273609086e-01 , 8.83495059679725081e-01 , 8.65404172372261637e-01 , 8.46222775599758892e-01 , 8.26008114140488470e-01 , 8.04820516454357704e-01 , 7.82723214634618358e-01 , 7.59782155695593819e-01 , 7.36065804758987863e-01 , 7.11644940725781994e-01 , 6.86592445043297195e-01 , 6.60983084197689363e-01 , 6.34893286580919369e-01 , 6.08400914398061987e-01 , 5.81585031295632104e-01 , 5.54525666404393935e-01 , 5.27303575500823407e-01 , 5.00000000000000000e-01 , 4.72696424499176593e-01 , 4.45474333595606120e-01 , 4.18414968704367896e-01 , 3.91599085601937957e-01 , 3.65106713419080631e-01 , 3.39016915802310692e-01 , 3.13407554956702750e-01 , 2.88355059274218006e-01 , 2.63934195241012137e-01 , 2.40217844304406181e-01 , 2.17276785365381614e-01 , 1.95179483545642324e-01 , 1.73991885859511558e-01 , 1.53777224400241136e-01 , 1.34595827627738335e-01 , 1.16504940320274905e-01 , 9.95585527263908726e-02 , 8.38072394247804386e-02 , 6.92980083689765242e-02 , 5.60741605588893355e-02 , 4.41751607393043935e-02 , 3.36365194664491537e-02 , 2.44896867760616282e-02 , 1.67619574140566614e-02 , 1.04763866452656437e-02 , 5.65171117488897506e-03 , 2.30223816078484449e-03 , 4.37217187368574701e-04 }, { 1.12187693612533150e-03 , 2.60826673735938984e-03 , 4.08908003391061665e-03 , 5.55788186616799473e-03 , 7.01013539537677800e-03 , 8.44147951172077513e-03 , 9.84763534974426001e-03 , 1.12244039453882182e-02 , 1.25676754954590613e-02 , 1.38734407010900965e-02 , 1.51378024213469995e-02 , 1.63569871831857824e-02 , 1.75273563911563096e-02 , 1.86454171622086572e-02 , 1.97078327377400581e-02 , 2.07114324354005543e-02 , 2.16532211081075995e-02 , 2.25303880806905776e-02 , 2.33403155368207514e-02 , 2.40805863308438742e-02 , 2.47489912010098387e-02 , 2.53435353624637053e-02 , 2.58624444602589126e-02 , 2.63041698645887154e-02 , 2.66673932924095802e-02 , 2.69510307416492879e-02 , 2.71542357262493199e-02 , 2.72764018023809417e-02 , 2.73171643782920137e-02 , 2.72764018023809417e-02 , 2.71542357262493199e-02 , 2.69510307416492879e-02 , 2.66673932924095802e-02 , 2.63041698645887154e-02 , 2.58624444602589126e-02 , 2.53435353624637053e-02 , 2.47489912010098387e-02 , 2.40805863308438742e-02 , 2.33403155368207514e-02 , 2.25303880806905776e-02 , 2.16532211081075995e-02 , 2.07114324354005543e-02 , 1.97078327377400581e-02 , 1.86454171622086572e-02 , 1.75273563911563096e-02 , 1.63569871831857824e-02 , 1.51378024213469995e-02 , 1.38734407010900965e-02 , 1.25676754954590613e-02 , 1.12244039453882182e-02 , 9.84763534974426001e-03 , 8.44147951172077513e-03 , 7.01013539537677800e-03 , 5.55788186616799473e-03 , 4.08908003391061665e-03 , 2.60826673735938984e-03 , 1.12187693612533150e-03 }, + { 9.99577600203693351e-01 , 9.97775738298645409e-01 , 9.94539504124221319e-01 , 9.89877507347175167e-01 , 9.83803101251462087e-01 , 9.76333778759434501e-01 , 9.67491068794129605e-01 , 9.57300464282176300e-01 , 9.45791346011015110e-01 , 9.32996897037403738e-01 , 9.18954006669686629e-01 , 9.03703163956544042e-01 , 8.87288340874826331e-01 , 8.69756865510021182e-01 , 8.51159285576954083e-01 , 8.31549222666062571e-01 , 8.10983217631539577e-01 , 7.89520567565112463e-01 , 7.67223154824423825e-01 , 7.44155268608359233e-01 , 7.20383419593419783e-01 , 6.95976148165376562e-01 , 6.71003826798997616e-01 , 6.45538457155554579e-01 , 6.19653462483076733e-01 , 5.93423475917880694e-01 , 5.66924125297733394e-01 , 5.40231815107071411e-01 , 5.13423506182971168e-01 , 4.86576493817028832e-01 , 4.59768184892928644e-01 , 4.33075874702266550e-01 , 4.06576524082119306e-01 , 3.80346537516923267e-01 , 3.54461542844445421e-01 , 3.28996173201002384e-01 , 3.04023851834623438e-01 , 2.79616580406580217e-01 , 2.55844731391640767e-01 , 2.32776845175576202e-01 , 2.10479432434887481e-01 , 1.89016782368460451e-01 , 1.68450777333937374e-01 , 1.48840714423045944e-01 , 1.30243134489978873e-01 , 1.12711659125173627e-01 , 9.62968360434559301e-02 , 8.10459933303133429e-02 , 6.70031029625962615e-02 , 5.42086539889849103e-02 , 4.26995357178237278e-02 , 3.25089312058703256e-02 , 2.36662212405654541e-02 , 1.61968987485379551e-02 , 1.01224926528248448e-02 , 5.46049587577868145e-03 , 2.22426170135454860e-03 , 4.22399796306696749e-04 }, { 1.08386162481372505e-03 , 2.51999080632512142e-03 , 3.95098692499933762e-03 , 5.37077676643938663e-03 , 6.77511855649440622e-03 , 8.15993711748548220e-03 , 9.52123273094670347e-03 , 1.08550780700731181e-02 , 1.21576263624819762e-02 , 1.34251215909909349e-02 , 1.46539090220802453e-02 , 1.58404456269046617e-02 , 1.69813102467080042e-02 , 1.80732134335436362e-02 , 1.91130069229292175e-02 , 2.00976927049338998e-02 , 2.10244316647910622e-02 , 2.18905517668201259e-02 , 2.26935557574099028e-02 , 2.34311283645131721e-02 , 2.41011429727088743e-02 , 2.47016677544811963e-02 , 2.52309712399765643e-02 , 2.56875273091428623e-02 , 2.60700195918349108e-02 , 2.63773452631854179e-02 , 2.66086182232895055e-02 , 2.67631716520291274e-02 , 2.68405599316674237e-02 , 2.68405599316674237e-02 , 2.67631716520291274e-02 , 2.66086182232895055e-02 , 2.63773452631854179e-02 , 2.60700195918349108e-02 , 2.56875273091428623e-02 , 2.52309712399765643e-02 , 2.47016677544811963e-02 , 2.41011429727088743e-02 , 2.34311283645131721e-02 , 2.26935557574099028e-02 , 2.18905517668201259e-02 , 2.10244316647910622e-02 , 2.00976927049338998e-02 , 1.91130069229292175e-02 , 1.80732134335436362e-02 , 1.69813102467080042e-02 , 1.58404456269046617e-02 , 1.46539090220802453e-02 , 1.34251215909909349e-02 , 1.21576263624819762e-02 , 1.08550780700731181e-02 , 9.52123273094670347e-03 , 8.15993711748548220e-03 , 6.77511855649440622e-03 , 5.37077676643938663e-03 , 3.95098692499933762e-03 , 2.51999080632512142e-03 , 1.08386162481372505e-03 }, + { 9.99591676954647346e-01 , 9.97849820191622938e-01 , 9.94721182566865481e-01 , 9.90213786978357824e-01 , 9.84340110840890792e-01 , 9.77116504688475551e-01 , 9.68563095176726896e-01 , 9.58703719394077614e-01 , 9.47565855871736029e-01 , 9.35180547146441166e-01 , 9.21582312908436063e-01 , 9.06809053644105800e-01 , 8.90901944931180467e-01 , 8.73905322639320081e-01 , 8.55866559338598898e-01 , 8.36835932252468551e-01 , 8.16866483119425002e-01 , 7.96013870352015096e-01 , 7.74336213904198156e-01 , 7.51893933278859006e-01 , 7.28749579126633296e-01 , 7.04967658905209515e-01 , 6.80614457084897428e-01 , 6.55757850401506803e-01 , 6.30467118671405813e-01 , 6.04812751696018225e-01 , 5.78866252793929004e-01 , 5.52699939508172089e-01 , 5.26386742044155032e-01 , 5.00000000000000000e-01 , 4.73613257955844968e-01 , 4.47300060491827911e-01 , 4.21133747206070996e-01 , 3.95187248303981720e-01 , 3.69532881328594132e-01 , 3.44242149598493141e-01 , 3.19385542915102572e-01 , 2.95032341094790540e-01 , 2.71250420873366649e-01 , 2.48106066721140994e-01 , 2.25663786095801816e-01 , 2.03986129647984932e-01 , 1.83133516880574942e-01 , 1.63164067747531394e-01 , 1.44133440661401130e-01 , 1.26094677360679891e-01 , 1.09098055068819547e-01 , 9.31909463558942136e-02 , 7.84176870915638952e-02 , 6.48194528535588621e-02 , 5.24341441282639570e-02 , 4.12962806059223586e-02 , 3.14369048232730694e-02 , 2.28834953115244731e-02 , 1.56598891591092360e-02 , 9.78621302164215529e-03 , 5.27881743313453420e-03 , 2.15017980837701756e-03 , 4.08323045352658139e-04 }, { 1.04774614227061175e-03 , 2.43611958413264247e-03 , 3.81976472674378734e-03 , 5.19294275049793103e-03 , 6.55168315317259525e-03 , 7.89217365654073383e-03 , 9.21067137680501441e-03 , 1.05034991442185931e-02 , 1.17670526968566818e-02 , 1.29978098656492493e-02 , 1.41923401002673998e-02 , 1.53473139180558410e-02 , 1.64595121355226373e-02 , 1.75258348182000534e-02 , 1.85433099094354618e-02 , 1.95091015080800061e-02 , 2.04205177693433521e-02 , 2.12750184055338180e-02 , 2.20702217651486884e-02 , 2.28039114702548833e-02 , 2.34740425934810079e-02 , 2.40787473573032193e-02 , 2.46163403396809921e-02 , 2.50853231714984505e-02 , 2.54843887126969572e-02 , 2.58124246954457397e-02 , 2.60685168241876972e-02 , 2.62519513239143701e-02 , 2.63622169295639648e-02 , 2.63990063109952114e-02 , 2.63622169295639648e-02 , 2.62519513239143701e-02 , 2.60685168241876972e-02 , 2.58124246954457397e-02 , 2.54843887126969572e-02 , 2.50853231714984505e-02 , 2.46163403396809921e-02 , 2.40787473573032193e-02 , 2.34740425934810079e-02 , 2.28039114702548833e-02 , 2.20702217651486884e-02 , 2.12750184055338180e-02 , 2.04205177693433521e-02 , 1.95091015080800061e-02 , 1.85433099094354618e-02 , 1.75258348182000534e-02 , 1.64595121355226373e-02 , 1.53473139180558410e-02 , 1.41923401002673998e-02 , 1.29978098656492493e-02 , 1.17670526968566818e-02 , 1.05034991442185931e-02 , 9.21067137680501441e-03 , 7.89217365654073383e-03 , 6.55168315317259525e-03 , 5.19294275049793103e-03 , 3.81976472674378734e-03 , 2.43611958413264247e-03 , 1.04774614227061175e-03 }, + { 9.99605061613717982e-01 , 9.97920262559419124e-01 , 9.94893947611110829e-01 , 9.90533600876299047e-01 , 9.84850894382526376e-01 , 9.77861127919998019e-01 , 9.69583138058211613e-01 , 9.60039238088813751e-01 , 9.49255155405022921e-01 , 9.37259961323449131e-01 , 9.24085992392964850e-01 , 9.09768763081072906e-01 , 8.94346869966131996e-01 , 8.77861887653292872e-01 , 8.60358256677865141e-01 , 8.41883163690677727e-01 , 8.22486414244738562e-01 , 8.02220298524255138e-01 , 7.81139450376972300e-01 , 7.59300700029284847e-01 , 7.36762920880853489e-01 , 7.13586870791539152e-01 , 6.89835028288398933e-01 , 6.65571424134224099e-01 , 6.40861468711630855e-01 , 6.15771775688014666e-01 , 5.90369982436712681e-01 , 5.64724567698472457e-01 , 5.38904666974768243e-01 , 5.12979886150623843e-01 , 4.87020113849376102e-01 , 4.61095333025231702e-01 , 4.35275432301527487e-01 , 4.09630017563287319e-01 , 3.84228224311985334e-01 , 3.59138531288369145e-01 , 3.34428575865775901e-01 , 3.10164971711601012e-01 , 2.86413129208460793e-01 , 2.63237079119146455e-01 , 2.40699299970715125e-01 , 2.18860549623027728e-01 , 1.97779701475744807e-01 , 1.77513585755261466e-01 , 1.58116836309322273e-01 , 1.39641743322134804e-01 , 1.22138112346707156e-01 , 1.05653130033867976e-01 , 9.02312369189271213e-02 , 7.59140076070351777e-02 , 6.27400386765508411e-02 , 5.07448445949770302e-02 , 3.99607619111862211e-02 , 3.04168619417883764e-02 , 2.21388720800019465e-02 , 1.51491056174736325e-02 , 9.46639912370090750e-03 , 5.10605238888914119e-03 , 2.07973744058091324e-03 , 3.94938386281988986e-04 }, { 1.01340598443687923e-03 , 2.35636496347678415e-03 , 3.69496558167272792e-03 , 5.02377859114399184e-03 , 6.33908323840797969e-03 , 7.63730929839239944e-03 , 8.91495050710386025e-03 , 1.01685603647286432e-02 , 1.13947584719989101e-02 , 1.25902388107606237e-02 , 1.37517783749623954e-02 , 1.48762457503944720e-02 , 1.59606095096481646e-02 , 1.70019463624732116e-02 , 1.79974490255422510e-02 , 1.89444337846217219e-02 , 1.98403477261904007e-02 , 2.06827756177923767e-02 , 2.14694464179678197e-02 , 2.21982393978935565e-02 , 2.28671898580572429e-02 , 2.34744944244561007e-02 , 2.40185159099855911e-02 , 2.44977877278784173e-02 , 2.49110178452750901e-02 , 2.52570922662546868e-02 , 2.55350780349278134e-02 , 2.57442257504904674e-02 , 2.58839715874550937e-02 , 2.59539388156103182e-02 , 2.59539388156103182e-02 , 2.58839715874550937e-02 , 2.57442257504904674e-02 , 2.55350780349278134e-02 , 2.52570922662546868e-02 , 2.49110178452750901e-02 , 2.44977877278784173e-02 , 2.40185159099855911e-02 , 2.34744944244561007e-02 , 2.28671898580572429e-02 , 2.21982393978935565e-02 , 2.14694464179678197e-02 , 2.06827756177923767e-02 , 1.98403477261904007e-02 , 1.89444337846217219e-02 , 1.79974490255422510e-02 , 1.70019463624732116e-02 , 1.59606095096481646e-02 , 1.48762457503944720e-02 , 1.37517783749623954e-02 , 1.25902388107606237e-02 , 1.13947584719989101e-02 , 1.01685603647286432e-02 , 8.91495050710386025e-03 , 7.63730929839239944e-03 , 6.33908323840797969e-03 , 5.02377859114399184e-03 , 3.69496558167272792e-03 , 2.35636496347678415e-03 , 1.01340598443687923e-03 }, + { 9.99617798815681691e-01 , 9.97987299907560077e-01 , 9.95058372616258513e-01 , 9.90838005642018516e-01 , 9.85337129416591462e-01 , 9.78570075956492036e-01 , 9.70554493340680557e-01 , 9.61311290691477582e-01 , 9.50864581237000572e-01 , 9.39241618607440487e-01 , 9.26472725423831744e-01 , 9.12591214054329969e-01 , 8.97633299641179772e-01 , 8.81638005586156126e-01 , 8.64647061724732602e-01 , 8.46704795447245528e-01 , 8.27858016047535394e-01 , 8.08155892598960812e-01 , 7.87649825675415305e-01 , 7.66393313251462649e-01 , 7.44441811131126063e-01 , 7.21852588269265794e-01 , 6.98684577362878256e-01 , 6.74998221102033447e-01 , 6.50855314481515346e-01 , 6.26318843584526719e-01 , 6.01452821259029213e-01 , 5.76322120115407621e-01 , 5.50992303281137019e-01 , 5.25529453353987153e-01 , 5.00000000000000000e-01 , 4.74470546646012847e-01 , 4.49007696718862981e-01 , 4.23677879884592323e-01 , 3.98547178740970731e-01 , 3.73681156415473226e-01 , 3.49144685518484654e-01 , 3.25001778897966553e-01 , 3.01315422637121688e-01 , 2.78147411730734206e-01 , 2.55558188868873937e-01 , 2.33606686748537351e-01 , 2.12350174324584695e-01 , 1.91844107401039132e-01 , 1.72141983952464550e-01 , 1.53295204552754416e-01 , 1.35352938275267454e-01 , 1.18361994413843902e-01 , 1.02366700358820173e-01 , 8.74087859456700311e-02 , 7.35272745761682833e-02 , 6.07583813925594851e-02 , 4.91354187629994138e-02 , 3.86887093085223691e-02 , 2.94455066593194252e-02 , 2.14299240435079537e-02 , 1.46628705834085452e-02 , 9.16199435798146014e-03 , 4.94162738374147488e-03 , 2.01270009243988265e-03 , 3.82201184318264138e-04 }, { 9.80726680835141426e-04 , 2.28046200300620859e-03 , 3.57617749587454481e-03 , 4.86273091517806701e-03 , 6.13663175390605220e-03 , 7.39453294246895758e-03 , 8.63314649380687166e-03 , 9.84923887305058990e-03 , 1.10396365741595223e-02 , 1.22012335937721015e-02 , 1.33309992620754443e-02 , 1.44259860440917008e-02 , 1.54833371841986978e-02 , 1.65002941379537062e-02 , 1.74742037582666758e-02 , 1.84025252115774078e-02 , 1.92828366035040846e-02 , 2.01128412954991245e-02 , 2.08903738954442468e-02 , 2.16134059062480476e-02 , 2.22800510175417445e-02 , 2.28885700265729804e-02 , 2.34373753754045337e-02 , 2.39250352925478027e-02 , 2.43502775282057639e-02 , 2.47119926733677941e-02 , 2.50092370540891257e-02 , 2.52412351933987006e-02 , 2.54073818344091699e-02 , 2.55072435193486324e-02 , 2.55405597203931106e-02 , 2.55072435193486324e-02 , 2.54073818344091699e-02 , 2.52412351933987006e-02 , 2.50092370540891257e-02 , 2.47119926733677941e-02 , 2.43502775282057639e-02 , 2.39250352925478027e-02 , 2.34373753754045337e-02 , 2.28885700265729804e-02 , 2.22800510175417445e-02 , 2.16134059062480476e-02 , 2.08903738954442468e-02 , 2.01128412954991245e-02 , 1.92828366035040846e-02 , 1.84025252115774078e-02 , 1.74742037582666758e-02 , 1.65002941379537062e-02 , 1.54833371841986978e-02 , 1.44259860440917008e-02 , 1.33309992620754443e-02 , 1.22012335937721015e-02 , 1.10396365741595223e-02 , 9.84923887305058990e-03 , 8.63314649380687166e-03 , 7.39453294246895758e-03 , 6.13663175390605220e-03 , 4.86273091517806701e-03 , 3.57617749587454481e-03 , 2.28046200300620859e-03 , 9.80726680835141426e-04 }, + { 9.99629929654388460e-01 , 9.98051148158133561e-01 , 9.95214985594645163e-01 , 9.91127974548618340e-01 , 9.85800361685825854e-01 , 9.79245586486963582e-01 , 9.71480200696164253e-01 , 9.62523817818101923e-01 , 9.52399061260546742e-01 , 9.41131506415948671e-01 , 9.28749615756035429e-01 , 9.15284666802002378e-01 , 9.00770673051988213e-01 , 8.85244298027709653e-01 , 8.68744762641578405e-01 , 8.51313746111148517e-01 , 8.32995280667739757e-01 , 8.13835640323442577e-01 , 7.93883223976543650e-01 , 7.73188433150125531e-01 , 7.51803544672377977e-01 , 7.29782578620056688e-01 , 7.07181161858563057e-01 , 6.84056387523282239e-01 , 6.60466670797096977e-01 , 6.36471601348363114e-01 , 6.12131792802082741e-01 , 5.87508729624507842e-01 , 5.62664611807948356e-01 , 5.37662197748117188e-01 , 5.12564645710910316e-01 , 4.87435354289089684e-01 , 4.62337802251882812e-01 , 4.37335388192051588e-01 , 4.12491270375492158e-01 , 3.87868207197917259e-01 , 3.63528398651636830e-01 , 3.39533329202903023e-01 , 3.15943612476717761e-01 , 2.92818838141436999e-01 , 2.70217421379943312e-01 , 2.48196455327622023e-01 , 2.26811566849874441e-01 , 2.06116776023456322e-01 , 1.86164359676557423e-01 , 1.67004719332260271e-01 , 1.48686253888851483e-01 , 1.31255237358421623e-01 , 1.14755701972290347e-01 , 9.92293269480118145e-02 , 8.47153331979975666e-02 , 7.12503842439645430e-02 , 5.88684935840513152e-02 , 4.76009387394532649e-02 , 3.74761821818981253e-02 , 2.85197993038357467e-02 , 2.07544135130364529e-02 , 1.41996383141740970e-02 , 8.87202545138167549e-03 , 4.78501440535482412e-03 , 1.94885184186643348e-03 , 3.70070345611485136e-04 }, { 9.49602839756845244e-04 , 2.20816672846545258e-03 , 3.46302095091548029e-03 , 4.70928971421019377e-03 , 5.94369505850525070e-03 , 7.16309591190325903e-03 , 8.36440589508865781e-03 , 9.54458832928659941e-03 , 1.07006611388349836e-02 , 1.18297036043413968e-02 , 1.29288634770123485e-02 , 1.39953640816573195e-02 , 1.50265112869949341e-02 , 1.60197002908123373e-02 , 1.69724221897052732e-02 , 1.78822703113840700e-02 , 1.87469462911400153e-02 , 1.95642658759815416e-02 , 2.03321644412087221e-02 , 2.10487022051925494e-02 , 2.17120691290237089e-02 , 2.23205894885622064e-02 , 2.28727261072850900e-02 , 2.33670842392077610e-02 , 2.38024150920506175e-02 , 2.41776189817388375e-02 , 2.44917481102589173e-02 , 2.47440089598496456e-02 , 2.49337642974761971e-02 , 2.50605347845216445e-02 , 2.51240001876281392e-02 , 2.51240001876281392e-02 , 2.50605347845216445e-02 , 2.49337642974761971e-02 , 2.47440089598496456e-02 , 2.44917481102589173e-02 , 2.41776189817388375e-02 , 2.38024150920506175e-02 , 2.33670842392077610e-02 , 2.28727261072850900e-02 , 2.23205894885622064e-02 , 2.17120691290237089e-02 , 2.10487022051925494e-02 , 2.03321644412087221e-02 , 1.95642658759815416e-02 , 1.87469462911400153e-02 , 1.78822703113840700e-02 , 1.69724221897052732e-02 , 1.60197002908123373e-02 , 1.50265112869949341e-02 , 1.39953640816573195e-02 , 1.29288634770123485e-02 , 1.18297036043413968e-02 , 1.07006611388349836e-02 , 9.54458832928659941e-03 , 8.36440589508865781e-03 , 7.16309591190325903e-03 , 5.94369505850525070e-03 , 4.70928971421019377e-03 , 3.46302095091548029e-03 , 2.20816672846545258e-03 , 9.49602839756845244e-04 }, + { 9.99641492014561872e-01 , 9.98112006388985007e-01 , 9.95364273446094683e-01 , 9.91404405296863578e-01 , 9.86242017348785027e-01 , 9.79889724879470903e-01 , 9.72363067020504901e-01 , 9.63680460310921583e-01 , 9.53863151389265806e-01 , 9.42935164253926761e-01 , 9.30923241182061822e-01 , 9.17856777159751447e-01 , 9.03767747886728312e-01 , 8.88690631495186123e-01 , 8.72662324158923752e-01 , 8.55722049792422945e-01 , 8.37911264057493055e-01 , 8.19273552910682712e-01 , 7.99854525938812566e-01 , 7.79701704743142487e-01 , 7.58864406645016643e-01 , 7.37393623997402159e-01 , 7.15341899397555769e-01 , 6.92763197106123885e-01 , 6.69712770987292205e-01 , 6.46247029293125719e-01 , 6.22423396622976632e-01 , 5.98300173395753365e-01 , 5.73936393178935966e-01 , 5.49391678223472679e-01 , 5.24726093558079754e-01 , 5.00000000000000000e-01 , 4.75273906441920191e-01 , 4.50608321776527376e-01 , 4.26063606821064034e-01 , 4.01699826604246635e-01 , 3.77576603377023312e-01 , 3.53752970706874281e-01 , 3.30287229012707795e-01 , 3.07236802893876060e-01 , 2.84658100602444175e-01 , 2.62606376002597786e-01 , 2.41135593354983385e-01 , 2.20298295256857485e-01 , 2.00145474061187378e-01 , 1.80726447089317316e-01 , 1.62088735942506945e-01 , 1.44277950207577083e-01 , 1.27337675841076303e-01 , 1.11309368504813835e-01 , 9.62322521132716185e-02 , 8.21432228402485809e-02 , 6.90767588179381359e-02 , 5.70648357460732877e-02 , 4.61368486107342213e-02 , 3.63195396890783964e-02 , 2.76369329794950991e-02 , 2.01102751205290350e-02 , 1.37579826512149884e-02 , 8.59559470313638226e-03 , 4.63572655390526688e-03 , 1.88799361101494581e-03 , 3.58507985438109790e-04 }, { 9.19937297788542101e-04 , 2.13925417343188099e-03 , 3.35514588298006788e-03 , 4.56298433816332803e-03 , 5.75968803844002092e-03 , 6.94230630805780548e-03 , 8.10793920516916962e-03 , 9.25373223008063572e-03 , 1.03768806290195446e-02 , 1.14746355024449662e-02 , 1.25443102766724934e-02 , 1.35832871795489672e-02 , 1.45890236041402634e-02 , 1.55590583111099093e-02 , 1.64910174418896709e-02 , 1.73826203226779379e-02 , 1.82316850427286445e-02 , 1.90361337921747774e-02 , 1.97939979457720482e-02 , 2.05034228798331997e-02 , 2.11626725104079108e-02 , 2.17701335415137961e-02 , 2.23243194129706980e-02 , 2.28238739381463052e-02 , 2.32675746226918487e-02 , 2.36543356561344578e-02 , 2.39832105689975657e-02 , 2.42533945489419242e-02 , 2.44642264102559945e-02 , 2.46151902118737810e-02 , 2.47059165199590910e-02 , 2.47361833119655108e-02 , 2.47059165199590910e-02 , 2.46151902118737810e-02 , 2.44642264102559945e-02 , 2.42533945489419242e-02 , 2.39832105689975657e-02 , 2.36543356561344578e-02 , 2.32675746226918487e-02 , 2.28238739381463052e-02 , 2.23243194129706980e-02 , 2.17701335415137961e-02 , 2.11626725104079108e-02 , 2.05034228798331997e-02 , 1.97939979457720482e-02 , 1.90361337921747774e-02 , 1.82316850427286445e-02 , 1.73826203226779379e-02 , 1.64910174418896709e-02 , 1.55590583111099093e-02 , 1.45890236041402634e-02 , 1.35832871795489672e-02 , 1.25443102766724934e-02 , 1.14746355024449662e-02 , 1.03768806290195446e-02 , 9.25373223008063572e-03 , 8.10793920516916962e-03 , 6.94230630805780548e-03 , 5.75968803844002092e-03 , 4.56298433816332803e-03 , 3.35514588298006788e-03 , 2.13925417343188099e-03 , 9.19937297788542101e-04 }, + { 9.99652520867886030e-01 , 9.98170058385977610e-01 , 9.95506685738372199e-01 , 9.91668126942312989e-01 , 9.86663413894955488e-01 , 9.80504399826026884e-01 , 9.73205687429201438e-01 , 9.64784586065969840e-01 , 9.55261068539251412e-01 , 9.44657722997557014e-01 , 9.32999699077046385e-01 , 9.20314648126290158e-01 , 9.06632657561398769e-01 , 8.91986179471670693e-01 , 8.76409953630265970e-01 , 8.59940925085805441e-01 , 8.42618156527116580e-01 , 8.24482735627328656e-01 , 8.05577677586196583e-01 , 7.85947823101317056e-01 , 7.65639732009947283e-01 , 7.44701572853526450e-01 , 7.23183008626732016e-01 , 7.01135078981995785e-01 , 6.78610079168834091e-01 , 6.55661435995105513e-01 , 6.32343581104383712e-01 , 6.08711821870003500e-01 , 5.84822210211996429e-01 , 5.60731409648060231e-01 , 5.36496560893899521e-01 , 5.12175146331712239e-01 , 4.87824853668287761e-01 , 4.63503439106100479e-01 , 4.39268590351939714e-01 , 4.15177789788003571e-01 , 3.91288178129996445e-01 , 3.67656418895616288e-01 , 3.44338564004894543e-01 , 3.21389920831165965e-01 , 2.98864921018004215e-01 , 2.76816991373267929e-01 , 2.55298427146473494e-01 , 2.34360267990052717e-01 , 2.14052176898682972e-01 , 1.94422322413803361e-01 , 1.75517264372671317e-01 , 1.57381843472883365e-01 , 1.40059074914194587e-01 , 1.23590046369734058e-01 , 1.08013820528329293e-01 , 9.33673424386012168e-02 , 7.96853518737098143e-02 , 6.70003009229535873e-02 , 5.53422770024429439e-02 , 4.47389314607485947e-02 , 3.52154139340302152e-02 , 2.67943125707985931e-02 , 1.94956001739731398e-02 , 1.33365861050445175e-02 , 8.33187305768702188e-03 , 4.49331426162783917e-03 , 1.82994161402236038e-03 , 3.47479132113930294e-04 }, { 8.91640360848216509e-04 , 2.07351663028123396e-03 , 3.25222898448918139e-03 , 4.42337991318197347e-03 , 5.58406973006556409e-03 , 6.73152394835932130e-03 , 7.86301523801235906e-03 , 8.97585788784867160e-03 , 1.00674115767651045e-02 , 1.11350869041916267e-02 , 1.21763512843554370e-02 , 1.31887348575273292e-02 , 1.41698363071297417e-02 , 1.51173285362012390e-02 , 1.60289641774257752e-02 , 1.69025809185708031e-02 , 1.77361066284411929e-02 , 1.85275642701200234e-02 , 1.92750765893078130e-02 , 1.99768705663601713e-02 , 2.06312816213117638e-02 , 2.12367575618267954e-02 , 2.17918622646617252e-02 , 2.22952790818782831e-02 , 2.27458139637090710e-02 , 2.31423982906572082e-02 , 2.34840914081050067e-02 , 2.37700828574151542e-02 , 2.39996942982291551e-02 , 2.41723811174014772e-02 , 2.42877337207517141e-02 , 2.43454785045698618e-02 , 2.43454785045698618e-02 , 2.42877337207517141e-02 , 2.41723811174014772e-02 , 2.39996942982291551e-02 , 2.37700828574151542e-02 , 2.34840914081050067e-02 , 2.31423982906572082e-02 , 2.27458139637090710e-02 , 2.22952790818782831e-02 , 2.17918622646617252e-02 , 2.12367575618267954e-02 , 2.06312816213117638e-02 , 1.99768705663601713e-02 , 1.92750765893078130e-02 , 1.85275642701200234e-02 , 1.77361066284411929e-02 , 1.69025809185708031e-02 , 1.60289641774257752e-02 , 1.51173285362012390e-02 , 1.41698363071297417e-02 , 1.31887348575273292e-02 , 1.21763512843554370e-02 , 1.11350869041916267e-02 , 1.00674115767651045e-02 , 8.97585788784867160e-03 , 7.86301523801235906e-03 , 6.73152394835932130e-03 , 5.58406973006556409e-03 , 4.42337991318197347e-03 , 3.25222898448918139e-03 , 2.07351663028123396e-03 , 8.91640360848216509e-04 }, + }; + + // Gauss-Legendre points and weights for n=1...64 inclusive + static const float fdata[128][64] = + { + { 5.00000000000000000e-01 }, { 1.00000000000000000e+00 }, + { 7.88675134594812866e-01 , 2.11324865405187107e-01 }, { 5.00000000000000000e-01 , 5.00000000000000000e-01 }, + { 8.87298334620741702e-01 , 5.00000000000000000e-01 , 1.12701665379258312e-01 }, { 2.77777777777777790e-01 , 4.44444444444444420e-01 , 2.77777777777777790e-01 }, + { 9.30568155797026231e-01 , 6.69990521792428129e-01 , 3.30009478207571871e-01 , 6.94318442029737137e-02 }, { 1.73927422568726925e-01 , 3.26072577431273047e-01 , 3.26072577431273047e-01 , 1.73927422568726925e-01 }, + { 9.53089922969332037e-01 , 7.69234655052841498e-01 , 5.00000000000000000e-01 , 2.30765344947158446e-01 , 4.69100770306680043e-02 }, { 1.18463442528094542e-01 , 2.39314335249683235e-01 , 2.84444444444444444e-01 , 2.39314335249683235e-01 , 1.18463442528094542e-01 }, + { 9.66234757101576025e-01 , 8.30604693233132241e-01 , 6.19309593041598494e-01 , 3.80690406958401562e-01 , 1.69395306766867731e-01 , 3.37652428984239888e-02 }, { 8.56622461895851783e-02 , 1.80380786524069303e-01 , 2.33956967286345519e-01 , 2.33956967286345519e-01 , 1.80380786524069303e-01 , 8.56622461895851783e-02 }, + { 9.74553956171379299e-01 , 8.70765592799697230e-01 , 7.02922575688698537e-01 , 5.00000000000000000e-01 , 2.97077424311301408e-01 , 1.29234407200302770e-01 , 2.54460438286207360e-02 }, { 6.47424830844348514e-02 , 1.39852695744638322e-01 , 1.90915025252559462e-01 , 2.08979591836734702e-01 , 1.90915025252559462e-01 , 1.39852695744638322e-01 , 6.47424830844348514e-02 }, + { 9.80144928248768088e-01 , 8.98333238706813364e-01 , 7.62766204958164495e-01 , 5.91717321247824946e-01 , 4.08282678752175110e-01 , 2.37233795041835505e-01 , 1.01666761293186636e-01 , 1.98550717512318842e-02 }, { 5.06142681451881293e-02 , 1.11190517226687241e-01 , 1.56853322938943635e-01 , 1.81341891689180995e-01 , 1.81341891689180995e-01 , 1.56853322938943635e-01 , 1.11190517226687241e-01 , 5.06142681451881293e-02 }, + { 9.84080119753813043e-01 , 9.18015553663317885e-01 , 8.06685716350295179e-01 , 6.62126711701904513e-01 , 5.00000000000000000e-01 , 3.37873288298095542e-01 , 1.93314283649704793e-01 , 8.19844463366821014e-02 , 1.59198802461869536e-02 }, { 4.06371941807872061e-02 , 9.03240803474286980e-02 , 1.30305348201467719e-01 , 1.56173538520001431e-01 , 1.65119677500629891e-01 , 1.56173538520001431e-01 , 1.30305348201467719e-01 , 9.03240803474286980e-02 , 4.06371941807872061e-02 }, + { 9.86953264258585872e-01 , 9.32531683344492213e-01 , 8.39704784149512218e-01 , 7.16697697064623607e-01 , 5.74437169490815580e-01 , 4.25562830509184420e-01 , 2.83302302935376393e-01 , 1.60295215850487782e-01 , 6.74683166555077457e-02 , 1.30467357414141404e-02 }, { 3.33356721543440690e-02 , 7.47256745752902934e-02 , 1.09543181257991021e-01 , 1.34633359654998175e-01 , 1.47762112357376435e-01 , 1.47762112357376435e-01 , 1.34633359654998175e-01 , 1.09543181257991021e-01 , 7.47256745752902934e-02 , 3.33356721543440690e-02 }, + { 9.89114329073028431e-01 , 9.43531299884047603e-01 , 8.65076002787024678e-01 , 7.59548064603405848e-01 , 6.34771577976172452e-01 , 5.00000000000000000e-01 , 3.65228422023827493e-01 , 2.40451935396594096e-01 , 1.34923997212975350e-01 , 5.64687001159523486e-02 , 1.08856709269715031e-02 }, { 2.78342835580868316e-02 , 6.27901847324523060e-02 , 9.31451054638671172e-02 , 1.16596882295995241e-01 , 1.31402272255123326e-01 , 1.36462543388950308e-01 , 1.31402272255123326e-01 , 1.16596882295995241e-01 , 9.31451054638671172e-02 , 6.27901847324523060e-02 , 2.78342835580868316e-02 }, + { 9.90780317123359566e-01 , 9.52058628185237454e-01 , 8.84951337097152346e-01 , 7.93658977143308686e-01 , 6.83915749499090064e-01 , 5.62616704255734401e-01 , 4.37383295744265543e-01 , 3.16084250500909880e-01 , 2.06341022856691286e-01 , 1.15048662902847654e-01 , 4.79413718147625734e-02 , 9.21968287664037475e-03 }, { 2.35876681932559139e-02 , 5.34696629976592133e-02 , 8.00391642716731105e-02 , 1.01583713361532962e-01 , 1.16746268269177403e-01 , 1.24573522906701387e-01 , 1.24573522906701387e-01 , 1.16746268269177403e-01 , 1.01583713361532962e-01 , 8.00391642716731105e-02 , 5.34696629976592133e-02 , 2.35876681932559139e-02 }, + { 9.92091527359294068e-01 , 9.58799199611488961e-01 , 9.00789045366654939e-01 , 8.21174669720170058e-01 , 7.24246375518223462e-01 , 6.15229157977567387e-01 , 5.00000000000000000e-01 , 3.84770842022432613e-01 , 2.75753624481776594e-01 , 1.78825330279829886e-01 , 9.92109546333450470e-02 , 4.12008003885110177e-02 , 7.90847264070592554e-03 }, { 2.02420023826579386e-02 , 4.60607499188642258e-02 , 6.94367551098936248e-02 , 8.90729903809728690e-02 , 1.03908023768444255e-01 , 1.13141590131448616e-01 , 1.16275776615436949e-01 , 1.13141590131448616e-01 , 1.03908023768444255e-01 , 8.90729903809728690e-02 , 6.94367551098936248e-02 , 4.60607499188642258e-02 , 2.02420023826579386e-02 }, + { 9.93141904348406213e-01 , 9.64217441831786704e-01 , 9.13600657534882510e-01 , 8.43646452405842684e-01 , 7.57624318179077050e-01 , 6.59556184463944928e-01 , 5.54027474353671834e-01 , 4.45972525646328166e-01 , 3.40443815536055128e-01 , 2.42375681820922950e-01 , 1.56353547594157261e-01 , 8.63993424651175040e-02 , 3.57825581682132410e-02 , 6.85809565159383079e-03 }, { 1.75597301658759301e-02 , 4.00790435798801040e-02 , 6.07592853439515926e-02 , 7.86015835790967732e-02 , 9.27691987389689110e-02 , 1.02599231860647802e-01 , 1.07631926731578897e-01 , 1.07631926731578897e-01 , 1.02599231860647802e-01 , 9.27691987389689110e-02 , 7.86015835790967732e-02 , 6.07592853439515926e-02 , 4.00790435798801040e-02 , 1.75597301658759301e-02 }, + { 9.93996259010242689e-01 , 9.68636696200352976e-01 , 9.24103291705213659e-01 , 8.62208865680085035e-01 , 7.85486086304269415e-01 , 6.97075673538781637e-01 , 6.00597046998717299e-01 , 5.00000000000000000e-01 , 3.99402953001282757e-01 , 3.02924326461218307e-01 , 2.14513913695730585e-01 , 1.37791134319914965e-01 , 7.58967082947863969e-02 , 3.13633037996470451e-02 , 6.00374098975728528e-03 }, { 1.53766209980586346e-02 , 3.51830237440540622e-02 , 5.35796102335859697e-02 , 6.97853389630771620e-02 , 8.31346029084969601e-02 , 9.30805000077811057e-02 , 9.92157426635557893e-02 , 1.01289120962780643e-01 , 9.92157426635557893e-02 , 9.30805000077811057e-02 , 8.31346029084969601e-02 , 6.97853389630771620e-02 , 5.35796102335859697e-02 , 3.51830237440540622e-02 , 1.53766209980586346e-02 }, + { 9.94700467495824969e-01 , 9.72287511536616300e-01 , 9.32815601193915822e-01 , 8.77702204177501555e-01 , 8.08938122201321885e-01 , 7.29008388828613629e-01 , 6.40801775389629458e-01 , 5.47506254918818769e-01 , 4.52493745081181287e-01 , 3.59198224610370542e-01 , 2.70991611171386315e-01 , 1.91061877798678115e-01 , 1.22297795822498487e-01 , 6.71843988060841224e-02 , 2.77124884633837103e-02 , 5.29953250417503335e-03 }, { 1.35762297058770465e-02 , 3.11267619693239468e-02 , 4.75792558412463928e-02 , 6.23144856277669384e-02 , 7.47979944082883680e-02 , 8.45782596975012679e-02 , 9.13017075224617919e-02 , 9.47253052275342511e-02 , 9.47253052275342511e-02 , 9.13017075224617919e-02 , 8.45782596975012679e-02 , 7.47979944082883680e-02 , 6.23144856277669384e-02 , 4.75792558412463928e-02 , 3.11267619693239468e-02 , 1.35762297058770465e-02 }, + { 9.95287737657208682e-01 , 9.75337760884383842e-01 , 9.40119576863492901e-01 , 8.90757001948400684e-01 , 8.28835579608345419e-01 , 7.56345268543238469e-01 , 6.75615881726938206e-01 , 5.89242090747923886e-01 , 5.00000000000000000e-01 , 4.10757909252076059e-01 , 3.24384118273061850e-01 , 2.43654731456761503e-01 , 1.71164420391654609e-01 , 1.09242998051599288e-01 , 5.98804231365070508e-02 , 2.46622391156161198e-02 , 4.71226234279133183e-03 }, { 1.20741514342739657e-02 , 2.77297646869936014e-02 , 4.25180741585895888e-02 , 5.59419235967019840e-02 , 6.75681842342627376e-02 , 7.70228805384051418e-02 , 8.40020510782250179e-02 , 8.82813526834963225e-02 , 8.97232351781032667e-02 , 8.82813526834963225e-02 , 8.40020510782250179e-02 , 7.70228805384051418e-02 , 6.75681842342627376e-02 , 5.59419235967019840e-02 , 4.25180741585895888e-02 , 2.77297646869936014e-02 , 1.20741514342739657e-02 }, + { 9.95782584210465505e-01 , 9.77911974785698912e-01 , 9.46301233248777907e-01 , 9.01852479486261571e-01 , 8.45843521530176612e-01 , 7.79885415536973770e-01 , 7.05875580731421315e-01 , 6.25943112845752769e-01 , 5.42387506520867646e-01 , 4.57612493479132354e-01 , 3.74056887154247231e-01 , 2.94124419268578685e-01 , 2.20114584463026230e-01 , 1.54156478469823388e-01 , 9.81475205137384427e-02 , 5.36987667512221281e-02 , 2.20880252143011227e-02 , 4.21741578953452670e-03 }, { 1.08080067632416559e-02 , 2.48572744474848985e-02 , 3.82128651274445258e-02 , 5.04710220531435841e-02 , 6.12776033557392297e-02 , 7.03214573353253269e-02 , 7.73423375631326210e-02 , 8.21382418729163649e-02 , 8.45711914815718002e-02 , 8.45711914815718002e-02 , 8.21382418729163649e-02 , 7.73423375631326210e-02 , 7.03214573353253269e-02 , 6.12776033557392297e-02 , 5.04710220531435841e-02 , 3.82128651274445258e-02 , 2.48572744474848985e-02 , 1.08080067632416559e-02 }, + { 9.96203421921792232e-01 , 9.80104076067415009e-01 , 9.51577951807409006e-01 , 9.11357328268571409e-01 , 8.60483088667614693e-01 , 8.00272652330840550e-01 , 7.32285370687980497e-01 , 6.58282049981814943e-01 , 5.80179322820112642e-01 , 5.00000000000000000e-01 , 4.19820677179887303e-01 , 3.41717950018185057e-01 , 2.67714629312019503e-01 , 1.99727347669159477e-01 , 1.39516911332385307e-01 , 8.86426717314285906e-02 , 4.84220481925910495e-02 , 1.98959239325849843e-02 , 3.79657807820779842e-03 }, { 9.73089411486323906e-03 , 2.24071133828497998e-02 , 3.45222713688206131e-02 , 4.57450108112249995e-02 , 5.57833227736669948e-02 , 6.43769812696681071e-02 , 7.13033510868033016e-02 , 7.63830210329298348e-02 , 7.94844216969771700e-02 , 8.05272249243918492e-02 , 7.94844216969771700e-02 , 7.63830210329298348e-02 , 7.13033510868033016e-02 , 6.43769812696681071e-02 , 5.57833227736669948e-02 , 4.57450108112249995e-02 , 3.45222713688206131e-02 , 2.24071133828497998e-02 , 9.73089411486323906e-03 }, + { 9.96564299592547442e-01 , 9.81985963638956849e-01 , 9.56117214125662973e-01 , 9.19558485911109447e-01 , 8.73165953230075398e-01 , 8.18026840363257568e-01 , 7.55433500975413508e-01 , 6.86853044357709774e-01 , 6.13892925570822534e-01 , 5.38263260566748669e-01 , 4.61736739433251331e-01 , 3.86107074429177466e-01 , 3.13146955642290226e-01 , 2.44566499024586437e-01 , 1.81973159636742488e-01 , 1.26834046769924602e-01 , 8.04415140888905811e-02 , 4.38827858743370477e-02 , 1.80140363610431058e-02 , 3.43570040745253772e-03 }, { 8.80700356957605894e-03 , 2.03007149001934693e-02 , 3.13360241670545339e-02 , 4.16383707883523774e-02 , 5.09650599086202138e-02 , 5.90972659807592060e-02 , 6.58443192245883185e-02 , 7.10480546591910206e-02 , 7.45864932363018707e-02 , 7.63766935653629186e-02 , 7.63766935653629186e-02 , 7.45864932363018707e-02 , 7.10480546591910206e-02 , 6.58443192245883185e-02 , 5.90972659807592060e-02 , 5.09650599086202138e-02 , 4.16383707883523774e-02 , 3.13360241670545339e-02 , 2.03007149001934693e-02 , 8.80700356957605894e-03 }, + { 9.96876085310194782e-01 , 9.83613419283153156e-01 , 9.60049667075200452e-01 , 9.26681682291658593e-01 , 8.84219981737838889e-01 , 8.33569402098706114e-01 , 7.75809417943609914e-01 , 7.12171060103719444e-01 , 6.44010658401200531e-01 , 5.72780927080447588e-01 , 5.00000000000000000e-01 , 4.27219072919552467e-01 , 3.55989341598799469e-01 , 2.87828939896280611e-01 , 2.24190582056390086e-01 , 1.66430597901293831e-01 , 1.15780018262161041e-01 , 7.33183177083413518e-02 , 3.99503329247995823e-02 , 1.63865807168468540e-02 , 3.12391468980525002e-03 }, { 8.00861412888716727e-03 , 1.84768948854262469e-02 , 2.85672127134286025e-02 , 3.80500568141896520e-02 , 4.67222117280169311e-02 , 5.43986495835741893e-02 , 6.09157080268642667e-02 , 6.61344693166687342e-02 , 6.99436973955365748e-02 , 7.22622019949850231e-02 , 7.30405668248452072e-02 , 7.22622019949850231e-02 , 6.99436973955365748e-02 , 6.61344693166687342e-02 , 6.09157080268642667e-02 , 5.43986495835741893e-02 , 4.67222117280169311e-02 , 3.80500568141896520e-02 , 2.85672127134286025e-02 , 1.84768948854262469e-02 , 8.00861412888716727e-03 }, + { 9.97147292741199620e-01 , 9.85030248917714402e-01 , 9.63478386093586936e-01 , 9.32906288860150035e-01 , 8.93908402989604056e-01 , 8.47243631593341373e-01 , 7.93820201753455801e-01 , 7.34677918993378531e-01 , 6.70967910446042093e-01 , 6.03930213344110678e-01 , 5.34869636659861092e-01 , 4.65130363340138908e-01 , 3.96069786655889378e-01 , 3.29032089553957907e-01 , 2.65322081006621469e-01 , 2.06179798246544199e-01 , 1.52756368406658599e-01 , 1.06091597010395916e-01 , 6.70937111398499375e-02 , 3.65216139064130016e-02 , 1.49697510822856365e-02 , 2.85270725880035388e-03 }, { 7.31399764913609994e-03 , 1.68874507924070758e-02 , 2.61466675763416430e-02 , 3.48982342122602443e-02 , 4.29708031085338643e-02 , 5.02070722214404824e-02 , 5.64661480402696078e-02 , 6.16261884052562089e-02 , 6.55867523935311780e-02 , 6.82707491730075861e-02 , 6.96259364278159903e-02 , 6.96259364278159903e-02 , 6.82707491730075861e-02 , 6.55867523935311780e-02 , 6.16261884052562089e-02 , 5.64661480402696078e-02 , 5.02070722214404824e-02 , 4.29708031085338643e-02 , 3.48982342122602443e-02 , 2.61466675763416430e-02 , 1.68874507924070758e-02 , 7.31399764913609994e-03 }, + { 9.97384667498776079e-01 , 9.86271235609057606e-01 , 9.66485543413008075e-01 , 9.38376179135220867e-01 , 9.02444200809419894e-01 , 8.59330681565975141e-01 , 8.09804937881823061e-01 , 7.54750738923003706e-01 , 6.95150519015145463e-01 , 6.32067840485172505e-01 , 5.66628412149233096e-01 , 5.00000000000000000e-01 , 4.33371587850766959e-01 , 3.67932159514827550e-01 , 3.04849480984854593e-01 , 2.45249261076996239e-01 , 1.90195062118176911e-01 , 1.40669318434024915e-01 , 9.75557991905800503e-02 , 6.16238208647791677e-02 , 3.35144565869919461e-02 , 1.37287643909423836e-02 , 2.61533250122393838e-03 }, { 6.70592974357088565e-03 , 1.54940029284897224e-02 , 2.40188358655423345e-02 , 3.21162107042629250e-02 , 3.96407058883594746e-02 , 4.64578830300175771e-02 , 5.24460457322707060e-02 , 5.74983201112056821e-02 , 6.15245421533647668e-02 , 6.44528610940410807e-02 , 6.62310197023483066e-02 , 6.68272860930530926e-02 , 6.62310197023483066e-02 , 6.44528610940410807e-02 , 6.15245421533647668e-02 , 5.74983201112056821e-02 , 5.24460457322707060e-02 , 4.64578830300175771e-02 , 3.96407058883594746e-02 , 3.21162107042629250e-02 , 2.40188358655423345e-02 , 1.54940029284897224e-02 , 6.70592974357088565e-03 }, + { 9.97593609998510655e-01 , 9.87364277985654737e-01 , 9.69137276001366343e-01 , 9.43207763502200480e-01 , 9.10000992986951474e-01 , 8.70062095789277179e-01 , 8.24046825968487773e-01 , 7.72710735694419726e-01 , 7.16896753813022536e-01 , 6.57521339848081698e-01 , 5.95559433736808197e-01 , 5.32028446431302759e-01 , 4.67971553568697185e-01 , 4.04440566263191859e-01 , 3.42478660151918302e-01 , 2.83103246186977409e-01 , 2.27289264305580219e-01 , 1.75953174031512227e-01 , 1.29937904210722821e-01 , 8.99990070130485403e-02 , 5.67922364977994851e-02 , 3.08627239986336219e-02 , 1.26357220143452510e-02 , 2.40639000148931996e-03 }, { 6.17061489999360009e-03 , 1.42656943144668317e-02 , 2.21387194087099039e-02 , 2.96492924577183917e-02 , 3.66732407055401499e-02 , 4.30950807659766372e-02 , 4.88093260520569422e-02 , 5.37221350579828172e-02 , 5.77528340268627996e-02 , 6.08352364639016957e-02 , 6.29187281734141513e-02 , 6.39690976733760797e-02 , 6.39690976733760797e-02 , 6.29187281734141513e-02 , 6.08352364639016957e-02 , 5.77528340268627996e-02 , 5.37221350579828172e-02 , 4.88093260520569422e-02 , 4.30950807659766372e-02 , 3.66732407055401499e-02 , 2.96492924577183917e-02 , 2.21387194087099039e-02 , 1.42656943144668317e-02 , 6.17061489999360009e-03 }, + { 9.97778484895249007e-01 , 9.88331960729758707e-01 , 9.71487285614487162e-01 , 9.47495998939137718e-01 , 9.16721314380417041e-01 , 8.79629631518678790e-01 , 8.36783184236734146e-01 , 7.88831465120611419e-01 , 7.36501365722857515e-01 , 6.80586152904693931e-01 , 6.21933441860494263e-01 , 5.61432346305355212e-01 , 5.00000000000000000e-01 , 4.38567653694644788e-01 , 3.78066558139505793e-01 , 3.19413847095306069e-01 , 2.63498634277142540e-01 , 2.11168534879388525e-01 , 1.63216815763265827e-01 , 1.20370368481321183e-01 , 8.32786856195830011e-02 , 5.25040010608623167e-02 , 2.85127143855128315e-02 , 1.16680392702412442e-02 , 2.22151510475095083e-03 }, { 5.69689925051314414e-03 , 1.31774933075160684e-02 , 2.04695783506531545e-02 , 2.74523479879175969e-02 , 3.40191669061784552e-02 , 4.00703501675005111e-02 , 4.55141309914818271e-02 , 5.02679745335253211e-02 , 5.42598122371318256e-02 , 5.74291295728558207e-02 , 5.97278817678923851e-02 , 6.11212214951550176e-02 , 6.15880268633577227e-02 , 6.11212214951550176e-02 , 5.97278817678923851e-02 , 5.74291295728558207e-02 , 5.42598122371318256e-02 , 5.02679745335253211e-02 , 4.55141309914818271e-02 , 4.00703501675005111e-02 , 3.40191669061784552e-02 , 2.74523479879175969e-02 , 2.04695783506531545e-02 , 1.31774933075160684e-02 , 5.69689925051314414e-03 }, + { 9.97942850572808515e-01 , 9.89192722978235461e-01 , 9.73579533330857116e-01 , 9.51318930992153478e-01 , 9.22722971394248970e-01 , 8.88192974410339398e-01 , 8.48213630209978642e-01 , 8.03346146508808978e-01 , 7.54220357412252795e-01 , 7.01525877561743116e-01 , 6.46002419742978451e-01 , 5.88429410178445078e-01 , 5.29615046714656645e-01 , 4.70384953285343410e-01 , 4.11570589821554922e-01 , 3.53997580257021549e-01 , 2.98474122438256828e-01 , 2.45779642587747149e-01 , 1.96653853491190966e-01 , 1.51786369790021358e-01 , 1.11807025589660575e-01 , 7.72770286057509886e-02 , 4.86810690078464600e-02 , 2.64204666691428766e-02 , 1.08072770217645039e-02 , 2.05714942719153549e-03 }, { 5.27568630867150321e-03 , 1.22089255463159550e-02 , 1.89811916471813828e-02 , 2.54879126485739044e-02 , 3.16370231647874200e-02 , 3.73420748828298746e-02 , 4.25229471567426173e-02 , 4.71069001779570729e-02 , 5.10295805472127106e-02 , 5.42359202642882926e-02 , 5.66809082731598302e-02 , 5.83302217426482916e-02 , 5.91607076396311396e-02 , 5.91607076396311396e-02 , 5.83302217426482916e-02 , 5.66809082731598302e-02 , 5.42359202642882926e-02 , 5.10295805472127106e-02 , 4.71069001779570729e-02 , 4.25229471567426173e-02 , 3.73420748828298746e-02 , 3.16370231647874200e-02 , 2.54879126485739044e-02 , 1.89811916471813828e-02 , 1.22089255463159550e-02 , 5.27568630867150321e-03 }, + { 9.98089631444494252e-01 , 9.89961737980750600e-01 , 9.75450278907352475e-01 , 9.54741160338745565e-01 , 9.28103954009147247e-01 , 8.95885819535254146e-01 , 8.58506736869711795e-01 , 8.16453985973247587e-01 , 7.70275782289728483e-01 , 7.20574125875013460e-01 , 6.67996951819254448e-01 , 6.13229682719768410e-01 , 5.56986292804764971e-01 , 5.00000000000000000e-01 , 4.43013707195235029e-01 , 3.86770317280231590e-01 , 3.32003048180745552e-01 , 2.79425874124986540e-01 , 2.29724217710271544e-01 , 1.83546014026752413e-01 , 1.41493263130288149e-01 , 1.04114180464745881e-01 , 7.18960459908527527e-02 , 4.52588396612544491e-02 , 2.45497210926474974e-02 , 1.00382620192493877e-02 , 1.91036855550571648e-03 }, { 4.89949802564718009e-03 , 1.13431157980903117e-02 , 1.76485268787098561e-02 , 2.37247062603075307e-02 , 2.94917684299167981e-02 , 3.48744118831227981e-02 , 3.98024338865288832e-02 , 4.42115792718784720e-02 , 4.80443636850142533e-02 , 5.12508189088728972e-02 , 5.37891428942665895e-02 , 5.56262441784225944e-02 , 5.67381730544825741e-02 , 5.71104336894784903e-02 , 5.67381730544825741e-02 , 5.56262441784225944e-02 , 5.37891428942665895e-02 , 5.12508189088728972e-02 , 4.80443636850142533e-02 , 4.42115792718784720e-02 , 3.98024338865288832e-02 , 3.48744118831227981e-02 , 2.94917684299167981e-02 , 2.37247062603075307e-02 , 1.76485268787098561e-02 , 1.13431157980903117e-02 , 4.89949802564718009e-03 }, + { 9.98221248786977267e-01 , 9.90651582685436405e-01 , 9.77129640314469139e-01 , 9.57816513196066088e-01 , 9.32946261287197487e-01 , 9.02820685458589622e-01 , 8.67805439006815837e-01 , 8.28325547019432507e-01 , 7.84860235905700865e-01 , 7.37937112477559110e-01 , 6.88125758044539348e-01 , 6.36030813817589080e-01 , 5.82284641066690423e-01 , 5.27539644942017105e-01 , 4.72460355057982839e-01 , 4.17715358933309633e-01 , 3.63969186182410975e-01 , 3.11874241955460652e-01 , 2.62062887522440890e-01 , 2.15139764094299135e-01 , 1.71674452980567521e-01 , 1.32194560993184107e-01 , 9.71793145414104192e-02 , 6.70537387128024714e-02 , 4.21834868039339603e-02 , 2.28703596855309027e-02 , 9.34841731456362290e-03 , 1.77875121302277506e-03 }, { 4.56214129654725856e-03 , 1.05660562963856303e-02 , 1.64507138911521890e-02 , 2.21364673795021137e-02 , 2.75536728378583742e-02 , 3.26364619834998010e-02 , 3.73231071172843917e-02 , 4.15567086144506062e-02 , 4.52858721965164190e-02 , 4.84653289989649544e-02 , 5.10564837890303824e-02 , 5.30278829614232103e-02 , 5.43555961291470671e-02 , 5.50235065082375976e-02 , 5.50235065082375976e-02 , 5.43555961291470671e-02 , 5.30278829614232103e-02 , 5.10564837890303824e-02 , 4.84653289989649544e-02 , 4.52858721965164190e-02 , 4.15567086144506062e-02 , 3.73231071172843917e-02 , 3.26364619834998010e-02 , 2.75536728378583742e-02 , 2.21364673795021137e-02 , 1.64507138911521890e-02 , 1.05660562963856303e-02 , 4.56214129654725856e-03 }, + { 9.98339721130298230e-01 , 9.91272752630706577e-01 , 9.78642797889043847e-01 , 9.60590116476529365e-01 , 9.37318902460051340e-01 , 9.09092743807626169e-01 , 8.76231425867238567e-01 , 8.39107268801343231e-01 , 7.98140898569113855e-01 , 7.53796477562113765e-01 , 7.06576444087004374e-01 , 6.57015818933819995e-01 , 6.05676143083000551e-01 , 5.53139115066339615e-01 , 5.00000000000000000e-01 , 4.46860884933660385e-01 , 3.94323856916999449e-01 , 3.42984181066180005e-01 , 2.93423555912995682e-01 , 2.46203522437886180e-01 , 2.01859101430886090e-01 , 1.60892731198656741e-01 , 1.23768574132761433e-01 , 9.09072561923737754e-02 , 6.26810975399486048e-02 , 3.94098835234706069e-02 , 2.13572021109561354e-02 , 8.72724736929341230e-03 , 1.66027886970170698e-03 }, { 4.25845193937320499e-03 , 9.86604252806135354e-03 , 1.53702461010468104e-02 , 2.07010312593414181e-02 , 2.57974134512489600e-02 , 3.06015453285395679e-02 , 3.50589666275256395e-02 , 3.91191635678818928e-02 , 4.27361286830862663e-02 , 4.58688785696293802e-02 , 4.84819170472043023e-02 , 5.05456368799574798e-02 , 5.20366550388646903e-02 , 5.29380775486604713e-02 , 5.32396908591571197e-02 , 5.29380775486604713e-02 , 5.20366550388646903e-02 , 5.05456368799574798e-02 , 4.84819170472043023e-02 , 4.58688785696293802e-02 , 4.27361286830862663e-02 , 3.91191635678818928e-02 , 3.50589666275256395e-02 , 3.06015453285395679e-02 , 2.57974134512489600e-02 , 2.07010312593414181e-02 , 1.53702461010468104e-02 , 9.86604252806135354e-03 , 4.25845193937320499e-03 }, + { 9.98446742037324753e-01 , 9.91834061639873643e-01 , 9.80010932484153718e-01 , 9.63100023714637210e-01 , 9.41280267896026368e-01 , 9.14782881191384178e-01 , 8.83888716052413148e-01 , 8.48925247396657867e-01 , 8.10263091494621390e-01 , 7.68312074071009987e-01 , 7.23516884769044522e-01 , 6.76352362765439086e-01 , 6.27318463083944899e-01 , 5.76934956804291743e-01 , 5.25735921277658891e-01 , 4.74264078722341165e-01 , 4.23065043195708201e-01 , 3.72681536916055101e-01 , 3.23647637234560914e-01 , 2.76483115230955423e-01 , 2.31687925928990041e-01 , 1.89736908505378554e-01 , 1.51074752603342105e-01 , 1.16111283947586907e-01 , 8.52171188086157938e-02 , 5.87197321039736597e-02 , 3.68999762853628385e-02 , 1.99890675158462434e-02 , 8.16593836012639504e-03 , 1.55325796267522984e-03 }, { 3.98409624808330250e-03 , 9.23323415554547916e-03 , 1.43923539416616845e-02 , 1.93995962848135250e-02 , 2.42013364152970263e-02 , 2.87465781088095326e-02 , 3.29871149410902453e-02 , 3.68779873688526022e-02 , 4.03779476147101066e-02 , 4.34498936005414879e-02 , 4.60612611188930612e-02 , 4.81843685873221267e-02 , 4.97967102933976336e-02 , 5.08811948742027495e-02 , 5.14263264467794204e-02 , 5.14263264467794204e-02 , 5.08811948742027495e-02 , 4.97967102933976336e-02 , 4.81843685873221267e-02 , 4.60612611188930612e-02 , 4.34498936005414879e-02 , 4.03779476147101066e-02 , 3.68779873688526022e-02 , 3.29871149410902453e-02 , 2.87465781088095326e-02 , 2.42013364152970263e-02 , 1.93995962848135250e-02 , 1.43923539416616845e-02 , 9.23323415554547916e-03 , 3.98409624808330250e-03 }, + { 9.98543740909738520e-01 , 9.92342954832576174e-01 , 9.81251962546474843e-01 , 9.65378498948324060e-01 , 9.44880014974135540e-01 , 9.19960160073133637e-01 , 8.90866574208312501e-01 , 8.57888392293426616e-01 , 8.21353361462130227e-01 , 7.81624580703574656e-01 , 7.39096891022451241e-01 , 6.94192950804116471e-01 , 6.47359034990850790e-01 , 5.99060599667785354e-01 , 5.49777656076170795e-01 , 5.00000000000000000e-01 , 4.50222343923829260e-01 , 4.00939400332214702e-01 , 3.52640965009149210e-01 , 3.05807049195883529e-01 , 2.60903108977548759e-01 , 2.18375419296425372e-01 , 1.78646638537869829e-01 , 1.42111607706573356e-01 , 1.09133425791687527e-01 , 8.00398399268663352e-02 , 5.51199850258644805e-02 , 3.46215010516759195e-02 , 1.87480374535251675e-02 , 7.65704516742375836e-03 , 1.45625909026146291e-03 }, { 3.73541578962438775e-03 , 8.65931039515529036e-03 , 1.35045095924897114e-02 , 1.82161369561927335e-02 , 2.27468537636005518e-02 , 2.70515412124584277e-02 , 3.10873932805142139e-02 , 3.48142916177051828e-02 , 3.81951932993883081e-02 , 4.11964958807946313e-02 , 4.37883703042389397e-02 , 4.59450569468207379e-02 , 4.76451214561597544e-02 , 4.88716676931643598e-02 , 4.96125056133361539e-02 , 4.98602723967132289e-02 , 4.96125056133361539e-02 , 4.88716676931643598e-02 , 4.76451214561597544e-02 , 4.59450569468207379e-02 , 4.37883703042389397e-02 , 4.11964958807946313e-02 , 3.81951932993883081e-02 , 3.48142916177051828e-02 , 3.10873932805142139e-02 , 2.70515412124584277e-02 , 2.27468537636005518e-02 , 1.82161369561927335e-02 , 1.35045095924897114e-02 , 8.65931039515529036e-03 , 3.73541578962438775e-03 }, + { 9.98631930924740785e-01 , 9.92805755772634191e-01 , 9.82381127793753195e-01 , 9.67453037968869833e-01 , 9.48160577883026101e-01 , 9.24683806866284930e-01 , 8.97241897983971137e-01 , 8.66091059370144856e-01 , 8.31522133465107616e-01 , 7.93857878620381152e-01 , 7.53449954466114735e-01 , 7.10675638065317639e-01 , 6.65934301141063778e-01 , 6.19643681126068491e-01 , 5.72235980791398258e-01 , 5.24153832843869183e-01 , 4.75846167156130817e-01 , 4.27764019208601742e-01 , 3.80356318873931454e-01 , 3.34065698858936166e-01 , 2.89324361934682306e-01 , 2.46550045533885293e-01 , 2.06142121379618848e-01 , 1.68477866534892384e-01 , 1.33908940629855144e-01 , 1.02758102016028793e-01 , 7.53161931337150148e-02 , 5.18394221169739405e-02 , 3.25469620311301527e-02 , 1.76188722062467842e-02 , 7.19424422736583257e-03 , 1.36806907525921810e-03 }, { 3.50930500473504818e-03 , 8.13719736545283519e-03 , 1.26960326546310294e-02 , 1.71369314565107157e-02 , 2.14179490111133415e-02 , 2.54990296311880874e-02 , 2.93420467392677721e-02 , 3.29111113881809247e-02 , 3.61728970544242523e-02 , 3.90969478935351555e-02 , 4.16559621134733743e-02 , 4.38260465022019055e-02 , 4.55869393478819385e-02 , 4.69221995404022832e-02 , 4.78193600396374305e-02 , 4.82700442573638991e-02 , 4.82700442573638991e-02 , 4.78193600396374305e-02 , 4.69221995404022832e-02 , 4.55869393478819385e-02 , 4.38260465022019055e-02 , 4.16559621134733743e-02 , 3.90969478935351555e-02 , 3.61728970544242523e-02 , 3.29111113881809247e-02 , 2.93420467392677721e-02 , 2.54990296311880874e-02 , 2.14179490111133415e-02 , 1.71369314565107157e-02 , 1.26960326546310294e-02 , 8.13719736545283519e-03 , 3.50930500473504818e-03 }, + { 9.98712347123227540e-01 , 9.93227863115321297e-01 , 9.83411454844996369e-01 , 9.69347186305584141e-01 , 9.51158383871716806e-01 , 9.29004826338251988e-01 , 9.03081178137083329e-01 , 8.73615248224781094e-01 , 8.40865979984871448e-01 , 8.05121172918189520e-01 , 7.66694952393173867e-01 , 7.25925008636225333e-01 , 6.83169628874036650e-01 , 6.38804548576248465e-01 , 5.93219649413995742e-01 , 5.46815532927366732e-01 , 5.00000000000000000e-01 , 4.53184467072633324e-01 , 4.06780350586004202e-01 , 3.61195451423751479e-01 , 3.16830371125963350e-01 , 2.74074991363774667e-01 , 2.33305047606826188e-01 , 1.94878827081810480e-01 , 1.59134020015128608e-01 , 1.26384751775218906e-01 , 9.69188218629166987e-02 , 7.09951736617479706e-02 , 4.88416161282832079e-02 , 3.06528136944158244e-02 , 1.65885451550036173e-02 , 6.77213688467875625e-03 , 1.28765287677239126e-03 }, { 3.30311392379368900e-03 , 7.66085075646733785e-03 , 1.19577740508747393e-02 , 1.61501793161644772e-02 , 2.02007706658347969e-02 , 2.40738714093558480e-02 , 2.77354233158317795e-02 , 3.11532412651587404e-02 , 3.42972864093283591e-02 , 3.71399274219770745e-02 , 3.96561823974433680e-02 , 4.18239380335193520e-02 , 4.36241438094221654e-02 , 4.50409793303192876e-02 , 4.60619933216584246e-02 , 4.66782130327980591e-02 , 4.68842230801049947e-02 , 4.66782130327980591e-02 , 4.60619933216584246e-02 , 4.50409793303192876e-02 , 4.36241438094221654e-02 , 4.18239380335193520e-02 , 3.96561823974433680e-02 , 3.71399274219770745e-02 , 3.42972864093283591e-02 , 3.11532412651587404e-02 , 2.77354233158317795e-02 , 2.40738714093558480e-02 , 2.02007706658347969e-02 , 1.61501793161644772e-02 , 1.19577740508747393e-02 , 7.66085075646733785e-03 , 3.30311392379368900e-03 }, + { 9.98785876895420976e-01 , 9.93613908203154761e-01 , 9.84354131266672150e-01 , 9.71081198702553494e-01 , 9.53904838859162219e-01 , 9.32967319167282261e-01 , 9.08442113950466812e-01 , 8.80532438314936439e-01 , 8.49469556608131393e-01 , 8.15510863540264253e-01 , 7.78937750334873336e-01 , 7.40053272595163514e-01 , 6.99179638879322995e-01 , 6.56655540669731641e-01 , 6.12833345808224683e-01 , 5.68076178629591477e-01 , 5.22754910976551246e-01 , 4.77245089023448754e-01 , 4.31923821370408523e-01 , 3.87166654191775261e-01 , 3.43344459330268359e-01 , 3.00820361120677005e-01 , 2.59946727404836486e-01 , 2.21062249665126664e-01 , 1.84489136459735720e-01 , 1.50530443391868551e-01 , 1.19467561685063492e-01 , 9.15578860495331603e-02 , 6.70326808327177670e-02 , 4.60951611408377676e-02 , 2.89188012974464538e-02 , 1.56458687333278605e-02 , 6.38609179684525730e-03 , 1.21412310457904042e-03 }, { 3.11457027795434237e-03 , 7.22508137429751784e-03 , 1.12818609927474844e-02 , 1.52456903192230656e-02 , 1.90832968981937585e-02 , 2.27628057616766355e-02 , 2.62537072863390543e-02 , 2.95270679137622470e-02 , 3.25557607770382076e-02 , 3.53146879071278633e-02 , 3.77809873300159679e-02 , 3.99342221698859232e-02 , 4.17565498499228305e-02 , 4.32328698735178762e-02 , 4.43509489178469316e-02 , 4.51015221853203613e-02 , 4.54783701651299346e-02 , 4.54783701651299346e-02 , 4.51015221853203613e-02 , 4.43509489178469316e-02 , 4.32328698735178762e-02 , 4.17565498499228305e-02 , 3.99342221698859232e-02 , 3.77809873300159679e-02 , 3.53146879071278633e-02 , 3.25557607770382076e-02 , 2.95270679137622470e-02 , 2.62537072863390543e-02 , 2.27628057616766355e-02 , 1.90832968981937585e-02 , 1.52456903192230656e-02 , 1.12818609927474844e-02 , 7.22508137429751784e-03 , 3.11457027795434237e-03 }, + { 9.98853284549800158e-01 , 9.93967882221925780e-01 , 9.85218808019614922e-01 , 9.72672574103913612e-01 , 9.56427130679658788e-01 , 9.36609562512611182e-01 , 9.13374949546112758e-01 , 8.86905126143456290e-01 , 8.57407250778314367e-01 , 8.25112182332945143e-01 , 7.90272672374882301e-01 , 7.53161386620744278e-01 , 7.14068770758907068e-01 , 6.73300777215406931e-01 , 6.31176470604647988e-01 , 5.88025530582994782e-01 , 5.44185671637829604e-01 , 5.00000000000000000e-01 , 4.55814328362170396e-01 , 4.11974469417005218e-01 , 3.68823529395351957e-01 , 3.26699222784593013e-01 , 2.85931229241092877e-01 , 2.46838613379255695e-01 , 2.09727327625117754e-01 , 1.74887817667054801e-01 , 1.42592749221685605e-01 , 1.13094873856543723e-01 , 8.66250504538872979e-02 , 6.33904374873888316e-02 , 4.35728693203411913e-02 , 2.73274258960863360e-02 , 1.47811919803850830e-02 , 6.03211777807425090e-03 , 1.14671545019985133e-03 }, { 2.94171671022154264e-03 , 6.82541417418074635e-03 , 1.06614899557417910e-02 , 1.44146300544471268e-02 , 1.80550579317316912e-02 , 2.15542111630851081e-02 , 2.48846852006767635e-02 , 2.80204081061850643e-02 , 3.09368359830400931e-02 , 3.36111426345434491e-02 , 3.60223973862800334e-02 , 3.81517285777210266e-02 , 3.99824711211621345e-02 , 4.15002968644282919e-02 , 4.26933266960495619e-02 , 4.35522234985917661e-02 , 4.40702652151377314e-02 , 4.42433974535521440e-02 , 4.40702652151377314e-02 , 4.35522234985917661e-02 , 4.26933266960495619e-02 , 4.15002968644282919e-02 , 3.99824711211621345e-02 , 3.81517285777210266e-02 , 3.60223973862800334e-02 , 3.36111426345434491e-02 , 3.09368359830400931e-02 , 2.80204081061850643e-02 , 2.48846852006767635e-02 , 2.15542111630851081e-02 , 1.80550579317316912e-02 , 1.44146300544471268e-02 , 1.06614899557417910e-02 , 6.82541417418074635e-03 , 2.94171671022154264e-03 }, + { 9.98915231242042956e-01 , 9.94293239451106148e-01 , 9.86013845524848942e-01 , 9.74136492199753734e-01 , 9.58748887257829585e-01 , 9.39964900445198537e-01 , 9.17923583496237594e-01 , 8.92788115066103227e-01 , 8.64744585796778265e-01 , 8.34000618292760509e-01 , 8.00783829067990283e-01 , 7.65340142963122583e-01 , 7.27931972216710133e-01 , 6.88836273559844559e-01 , 6.48342497672014129e-01 , 6.06750446158432766e-01 , 5.64368051904692414e-01 , 5.21509099236854290e-01 , 4.78490900763145710e-01 , 4.35631948095307586e-01 , 3.93249553841567234e-01 , 3.51657502327985871e-01 , 3.11163726440155386e-01 , 2.72068027783289867e-01 , 2.34659857036877417e-01 , 1.99216170932009717e-01 , 1.65999381707239463e-01 , 1.35255414203221708e-01 , 1.07211884933896745e-01 , 8.20764165037623505e-02 , 6.00350995548014355e-02 , 4.12511127421704704e-02 , 2.58635078002462278e-02 , 1.39861544751510251e-02 , 5.70676054889388083e-03 , 1.08476875795708192e-03 }, { 2.78285983212252274e-03 , 6.45797364203278684e-03 , 1.00907576488677361e-02 , 1.36493107492843893e-02 , 1.71069053851536160e-02 , 2.04378754618224460e-02 , 2.36175417451329889e-02 , 2.66223569888799604e-02 , 2.94300721226624096e-02 , 3.20198986775077424e-02 , 3.43726619178682247e-02 , 3.64709425028265297e-02 , 3.82992053229353341e-02 , 3.98439144560358005e-02 , 4.10936333521698532e-02 , 4.20391094898309656e-02 , 4.26733428696693118e-02 , 4.29916378351973757e-02 , 4.29916378351973757e-02 , 4.26733428696693118e-02 , 4.20391094898309656e-02 , 4.10936333521698532e-02 , 3.98439144560358005e-02 , 3.82992053229353341e-02 , 3.64709425028265297e-02 , 3.43726619178682247e-02 , 3.20198986775077424e-02 , 2.94300721226624096e-02 , 2.66223569888799604e-02 , 2.36175417451329889e-02 , 2.04378754618224460e-02 , 1.71069053851536160e-02 , 1.36493107492843893e-02 , 1.00907576488677361e-02 , 6.45797364203278684e-03 , 2.78285983212252274e-03 }, + { 9.98972291238956811e-01 , 9.94592981607159587e-01 , 9.86746515028242843e-01 , 9.75486171631047450e-01 , 9.60890718706231883e-01 , 9.43062481077743042e-01 , 9.22126493670277991e-01 , 8.98229600254951133e-01 , 8.71539416990982585e-01 , 8.42243154565479712e-01 , 8.10546304204462276e-01 , 7.76671195930790925e-01 , 7.40855438901602770e-01 , 7.03350254659163010e-01 , 6.64418714941853450e-01 , 6.24333896395682819e-01 , 5.83376965119925983e-01 , 5.41835204477384980e-01 , 5.00000000000000000e-01 , 4.58164795522615020e-01 , 4.16623034880074017e-01 , 3.75666103604317125e-01 , 3.35581285058146495e-01 , 2.96649745340836934e-01 , 2.59144561098397230e-01 , 2.23328804069209103e-01 , 1.89453695795537752e-01 , 1.57756845434520315e-01 , 1.28460583009017359e-01 , 1.01770399745048853e-01 , 7.78735063297220087e-02 , 5.69375189222569578e-02 , 3.91092812937681306e-02 , 2.45138283689525886e-02 , 1.32534849717571273e-02 , 5.40701839284040645e-03 , 1.02770876104317553e-03 }, { 2.63652863974896947e-03 , 6.11939005015377843e-03 , 9.56452224454198280e-03 , 1.29430184952794673e-02 , 1.62308199237607420e-02 , 1.94048012509672706e-02 , 2.24426823312185823e-02 , 2.53231488274123021e-02 , 2.80259939991374593e-02 , 3.05322582616129948e-02 , 3.28243614363756264e-02 , 3.48862257778501730e-02 , 3.67033886242440835e-02 , 3.82631037852646169e-02 , 3.95544309187646909e-02 , 4.05683122542325122e-02 , 4.12976361182186280e-02 , 4.17372868129313943e-02 , 4.18841804965694522e-02 , 4.17372868129313943e-02 , 4.12976361182186280e-02 , 4.05683122542325122e-02 , 3.95544309187646909e-02 , 3.82631037852646169e-02 , 3.67033886242440835e-02 , 3.48862257778501730e-02 , 3.28243614363756264e-02 , 3.05322582616129948e-02 , 2.80259939991374593e-02 , 2.53231488274123021e-02 , 2.24426823312185823e-02 , 1.94048012509672706e-02 , 1.62308199237607420e-02 , 1.29430184952794673e-02 , 9.56452224454198280e-03 , 6.11939005015377843e-03 , 2.63652863974896947e-03 }, + { 9.99024965267843790e-01 , 9.94869727133192772e-01 , 9.87423164295076705e-01 , 9.76733165466764808e-01 , 9.62870666024292166e-01 , 9.45927869502316110e-01 , 9.26017510966181123e-01 , 9.03272083802658443e-01 , 8.77842951876985356e-01 , 8.49899340189592123e-01 , 8.19627207914840894e-01 , 7.87228010523903565e-01 , 7.52917358963965500e-01 , 7.16923584716188222e-01 , 6.79486220239717498e-01 , 6.40854404895082608e-01 , 6.01285226946058349e-01 , 5.61042012668933721e-01 , 5.20392573952289106e-01 , 4.79607426047710894e-01 , 4.38957987331066279e-01 , 3.98714773053941651e-01 , 3.59145595104917392e-01 , 3.20513779760282502e-01 , 2.83076415283811778e-01 , 2.47082641036034445e-01 , 2.12771989476096463e-01 , 1.80372792085159134e-01 , 1.50100659810407822e-01 , 1.22157048123014658e-01 , 9.67279161973415846e-02 , 7.39824890338189045e-02 , 5.40721304976838901e-02 , 3.71293339757077998e-02 , 2.32668345332352026e-02 , 1.25768357049232463e-02 , 5.13027286680721364e-03 , 9.75034732156190116e-04 }, { 2.50144037481967287e-03 , 5.80672235823433656e-03 , 9.07828885480661818e-03 , 1.22898698691161871e-02 , 1.54197502725875266e-02 , 1.84470407970123706e-02 , 2.13515792523372161e-02 , 2.41140309303793411e-02 , 2.67160099551661603e-02 , 2.91401995734986013e-02 , 3.13704666960665235e-02 , 3.33919689895702046e-02 , 3.51912535334494778e-02 , 3.67563462923717263e-02 , 3.80768317742231979e-02 , 3.91439223291054766e-02 , 3.99505166217639096e-02 , 4.04912468852985513e-02 , 4.07625146401928914e-02 , 4.07625146401928914e-02 , 4.04912468852985513e-02 , 3.99505166217639096e-02 , 3.91439223291054766e-02 , 3.80768317742231979e-02 , 3.67563462923717263e-02 , 3.51912535334494778e-02 , 3.33919689895702046e-02 , 3.13704666960665235e-02 , 2.91401995734986013e-02 , 2.67160099551661603e-02 , 2.41140309303793411e-02 , 2.13515792523372161e-02 , 1.84470407970123706e-02 , 1.54197502725875266e-02 , 1.22898698691161871e-02 , 9.07828885480661818e-03 , 5.80672235823433656e-03 , 2.50144037481967287e-03 }, + { 9.99073691533216457e-01 , 9.95125768427343016e-01 , 9.88049354666735491e-01 , 9.77887606162326173e-01 , 9.64704574243369084e-01 , 9.48583559646496433e-01 , 9.29626468999953048e-01 , 9.07953148715071601e-01 , 8.83700621465531744e-01 , 8.57022217947267295e-01 , 8.28086606716005424e-01 , 7.97076727478639002e-01 , 7.64188634330218775e-01 , 7.29630256154568002e-01 , 6.93620081985780734e-01 , 6.56385779624092947e-01 , 6.18162756230917876e-01 , 5.79192669998918941e-01 , 5.39721902304377776e-01 , 5.00000000000000000e-01 , 4.60278097695622279e-01 , 4.20807330001081115e-01 , 3.81837243769082124e-01 , 3.43614220375907053e-01 , 3.06379918014219266e-01 , 2.70369743845431998e-01 , 2.35811365669781253e-01 , 2.02923272521360998e-01 , 1.71913393283994548e-01 , 1.42977782052732649e-01 , 1.16299378534468256e-01 , 9.20468512849284409e-02 , 7.03735310000469239e-02 , 5.14164403535035536e-02 , 3.52954257566308882e-02 , 2.21123938376738619e-02 , 1.19506453332644726e-02 , 4.87423157265700832e-03 , 9.26308466783546964e-04 }, { 2.37647234581755051e-03 , 5.51739446958229678e-03 , 8.62811454686245906e-03 , 1.16846924160890816e-02 , 1.46674779919516891e-02 , 1.75575557490656661e-02 , 2.03366384239669212e-02 , 2.29871505544583174e-02 , 2.54923326460647012e-02 , 2.78363451704581495e-02 , 3.00043680442980756e-02 , 3.19826940693411915e-02 , 3.37588154831156353e-02 , 3.53215029853043774e-02 , 3.66608767071343114e-02 , 3.77684686614180309e-02 , 3.86372762723410090e-02 , 3.92618066436855873e-02 , 3.96381112841842354e-02 , 3.97638110697214262e-02 , 3.96381112841842354e-02 , 3.92618066436855873e-02 , 3.86372762723410090e-02 , 3.77684686614180309e-02 , 3.66608767071343114e-02 , 3.53215029853043774e-02 , 3.37588154831156353e-02 , 3.19826940693411915e-02 , 3.00043680442980756e-02 , 2.78363451704581495e-02 , 2.54923326460647012e-02 , 2.29871505544583174e-02 , 2.03366384239669212e-02 , 1.75575557490656661e-02 , 1.46674779919516891e-02 , 1.16846924160890816e-02 , 8.62811454686245906e-03 , 5.51739446958229678e-03 , 2.37647234581755051e-03 }, + { 9.99118854855279626e-01 , 9.95363119349728542e-01 , 9.88629974991887095e-01 , 9.78958409606895841e-01 , 9.66406404139338315e-01 , 9.51049403484437117e-01 , 9.32979751606129781e-01 , 9.12306115416655850e-01 , 8.89152825713259709e-01 , 8.63659127594963549e-01 , 8.35978342307089783e-01 , 8.06276944833990150e-01 , 7.74733562547564092e-01 , 7.41537900843089348e-01 , 7.06889602185802435e-01 , 6.70997045412879189e-01 , 6.34076092503626843e-01 , 5.96348790350685554e-01 , 5.58042035337627640e-01 , 5.19386208753025436e-01 , 4.80613791246974564e-01 , 4.41957964662372416e-01 , 4.03651209649314446e-01 , 3.65923907496373157e-01 , 3.29002954587120755e-01 , 2.93110397814197510e-01 , 2.58462099156910652e-01 , 2.25266437452435908e-01 , 1.93723055166009878e-01 , 1.64021657692910217e-01 , 1.36340872405036451e-01 , 1.10847174286740305e-01 , 8.76938845833441644e-02 , 6.70202483938702465e-02 , 4.89505965155628484e-02 , 3.35935958606617333e-02 , 2.10415903931041731e-02 , 1.13700250081128686e-02 , 4.63688065027149671e-03 , 8.81145144720399788e-04 }, { 2.26063854926659546e-03 , 5.24914226557640640e-03 , 8.21052919095394476e-03 , 1.11229245970834792e-02 , 1.39685034900116998e-02 , 1.67300976412739222e-02 , 1.93910839872360082e-02 , 2.19354540928366343e-02 , 2.43479038175361158e-02 , 2.66139234919684116e-02 , 2.87198845496957761e-02 , 3.06531212464644688e-02 , 3.24020067283005211e-02 , 3.39560229076169492e-02 , 3.53058236956433902e-02 , 3.64432911979020308e-02 , 3.73615845289841306e-02 , 3.80551809503131208e-02 , 3.85199090821239792e-02 , 3.87529739892124026e-02 , 3.87529739892124026e-02 , 3.85199090821239792e-02 , 3.80551809503131208e-02 , 3.73615845289841306e-02 , 3.64432911979020308e-02 , 3.53058236956433902e-02 , 3.39560229076169492e-02 , 3.24020067283005211e-02 , 3.06531212464644688e-02 , 2.87198845496957761e-02 , 2.66139234919684116e-02 , 2.43479038175361158e-02 , 2.19354540928366343e-02 , 1.93910839872360082e-02 , 1.67300976412739222e-02 , 1.39685034900116998e-02 , 1.11229245970834792e-02 , 8.21052919095394476e-03 , 5.24914226557640640e-03 , 2.26063854926659546e-03 }, + { 9.99160794287385690e-01 , 9.95583554849508112e-01 , 9.89169336780541641e-01 , 9.79953445865173078e-01 , 9.67988493748926926e-01 , 9.53342972379050524e-01 , 9.36100755846220656e-01 , 9.16360600200680664e-01 , 8.94235572523704669e-01 , 8.69852401534963127e-01 , 8.43350751017475586e-01 , 8.14882419536098190e-01 , 7.84610470805107929e-01 , 7.52708299599702979e-01 , 7.19358638525703586e-01 , 6.84752511320240731e-01 , 6.49088138670912418e-01 , 6.12569802816711362e-01 , 5.75406677431996028e-01 , 5.37811629494581500e-01 , 5.00000000000000000e-01 , 4.62188370505418500e-01 , 4.24593322568003917e-01 , 3.87430197183288638e-01 , 3.50911861329087582e-01 , 3.15247488679759269e-01 , 2.80641361474296469e-01 , 2.47291700400296993e-01 , 2.15389529194892071e-01 , 1.85117580463901837e-01 , 1.56649248982524358e-01 , 1.30147598465036901e-01 , 1.05764427476295317e-01 , 8.36393997993193361e-02 , 6.38992441537792888e-02 , 4.66570276209494136e-02 , 3.20115062510730880e-02 , 2.00465541348268869e-02 , 1.08306632194583082e-02 , 4.41644515049184616e-03 , 8.39205712614279203e-04 }, { 2.15307017908244374e-03 , 4.99996938695297308e-03 , 7.82246920390929426e-03 , 1.06005316843897773e-02 , 1.33179496035552222e-02 , 1.59591058658496397e-02 , 1.85088583517539935e-02 , 2.09525975979548452e-02 , 2.32763241845071710e-02 , 2.54667271473087466e-02 , 2.75112596212893704e-02 , 2.93982104749359735e-02 , 3.11167712904831598e-02 , 3.26570982267637075e-02 , 3.40103683804383813e-02 , 3.51688303104087455e-02 , 3.61258484305115382e-02 , 3.68759410136117322e-02 , 3.74148115881107746e-02 , 3.77393735463579100e-02 , 3.78477678236491880e-02 , 3.77393735463579100e-02 , 3.74148115881107746e-02 , 3.68759410136117322e-02 , 3.61258484305115382e-02 , 3.51688303104087455e-02 , 3.40103683804383813e-02 , 3.26570982267637075e-02 , 3.11167712904831598e-02 , 2.93982104749359735e-02 , 2.75112596212893704e-02 , 2.54667271473087466e-02 , 2.32763241845071710e-02 , 2.09525975979548452e-02 , 1.85088583517539935e-02 , 1.59591058658496397e-02 , 1.33179496035552222e-02 , 1.06005316843897773e-02 , 7.82246920390929426e-03 , 4.99996938695297308e-03 , 2.15307017908244374e-03 }, + { 9.99199809495031177e-01 , 9.95788644170430448e-01 , 9.89671254031874059e-01 , 9.80879682669102193e-01 , 9.69461778677494057e-01 , 9.55479862452063733e-01 , 9.39010284906086401e-01 , 9.20142991630908402e-01 , 8.98981026627743707e-01 , 8.75639967844740186e-01 , 8.50247295278085624e-01 , 8.22941694434623949e-01 , 7.93872298742554605e-01 , 7.63197874965596101e-01 , 7.31085956035210982e-01 , 6.97711926021487461e-01 , 6.63258062232705781e-01 , 6.27912539671439562e-01 , 5.91868403282427291e-01 , 5.55322513604259882e-01 , 5.18474471582675900e-01 , 4.81525528417324100e-01 , 4.44677486395740063e-01 , 4.08131596717572709e-01 , 3.72087460328560438e-01 , 3.36741937767294219e-01 , 3.02288073978512484e-01 , 2.68914043964789018e-01 , 2.36802125034403843e-01 , 2.06127701257445339e-01 , 1.77058305565376078e-01 , 1.49752704721914404e-01 , 1.24360032155259759e-01 , 1.01018973372256293e-01 , 7.98570083690915422e-02 , 6.09897150939136268e-02 , 4.45201375479362740e-02 , 3.05382213225059117e-02 , 1.91203173308977549e-02 , 1.03287459681259026e-02 , 4.21135582956953976e-03 , 8.00190504968792469e-04 }, { 2.05299930232454237e-03 , 4.76811015087425134e-03 , 7.46122184867874672e-03 , 1.01139347845263221e-02 , 1.27114797630565237e-02 , 1.52396203498017333e-02 , 1.76845355487960550e-02 , 2.00328675903461290e-02 , 2.22717888859829405e-02 , 2.43890703964016221e-02 , 2.63731478495870357e-02 , 2.82131846790091914e-02 , 2.98991311137933279e-02 , 3.14217790225012894e-02 , 3.27728121824544874e-02 , 3.39448516882609741e-02 , 3.49314962462970793e-02 , 3.57273571325854924e-02 , 3.63280876219020527e-02 , 3.67304067267337636e-02 , 3.69321171160864395e-02 , 3.69321171160864395e-02 , 3.67304067267337636e-02 , 3.63280876219020527e-02 , 3.57273571325854924e-02 , 3.49314962462970793e-02 , 3.39448516882609741e-02 , 3.27728121824544874e-02 , 3.14217790225012894e-02 , 2.98991311137933279e-02 , 2.82131846790091914e-02 , 2.63731478495870357e-02 , 2.43890703964016221e-02 , 2.22717888859829405e-02 , 2.00328675903461290e-02 , 1.76845355487960550e-02 , 1.52396203498017333e-02 , 1.27114797630565237e-02 , 1.01139347845263221e-02 , 7.46122184867874672e-03 , 4.76811015087425134e-03 , 2.05299930232454237e-03 }, + { 9.99236166121253877e-01 , 9.95979778796622028e-01 , 9.90139110490127705e-01 , 9.81743306507040003e-01 , 9.70835978423818968e-01 , 9.57473953603069416e-01 , 9.41726882609308369e-01 , 9.23676858104657494e-01 , 9.03417982068469350e-01 , 8.81055873597477612e-01 , 8.56707117634478488e-01 , 8.30498656875749086e-01 , 8.02567129819800495e-01 , 7.73058158330042322e-01 , 7.42125588392867352e-01 , 7.09930688014634659e-01 , 6.76641306432151923e-01 , 6.42430999016456838e-01 , 6.07478122430259115e-01 , 5.71964904755356662e-01 , 5.36076495437293077e-01 , 5.00000000000000000e-01 , 4.63923504562706868e-01 , 4.28035095244643338e-01 , 3.92521877569740885e-01 , 3.57569000983543162e-01 , 3.23358693567848077e-01 , 2.90069311985365397e-01 , 2.57874411607132648e-01 , 2.26941841669957650e-01 , 1.97432870180199532e-01 , 1.69501343124250942e-01 , 1.43292882365521485e-01 , 1.18944126402522443e-01 , 9.65820179315306782e-02 , 7.63231418953424778e-02 , 5.82731173906915687e-02 , 4.25260463969306321e-02 , 2.91640215761810699e-02 , 1.82566934929600036e-02 , 9.86088950987233474e-03 , 4.02022120337792652e-03 , 7.63833878746143237e-04 }, { 1.95974512692206372e-03 , 4.55199831870070192e-03 , 7.12437821578824296e-03 , 9.65995071184195045e-03 , 1.21452283069194075e-02 , 1.45672066307492472e-02 , 1.69132460434301447e-02 , 1.91711110970663283e-02 , 2.13290285989910407e-02 , 2.33757473771732879e-02 , 2.53005963921950766e-02 , 2.70935401594408938e-02 , 2.87452309784552579e-02 , 3.02470576249956463e-02 , 3.15911902246980569e-02 , 3.27706210631613995e-02 , 3.37792011146825846e-02 , 3.46116720968283401e-02 , 3.52636938825425170e-02 , 3.57318671262570678e-02 , 3.60137509857109891e-02 , 3.61078758468994926e-02 , 3.60137509857109891e-02 , 3.57318671262570678e-02 , 3.52636938825425170e-02 , 3.46116720968283401e-02 , 3.37792011146825846e-02 , 3.27706210631613995e-02 , 3.15911902246980569e-02 , 3.02470576249956463e-02 , 2.87452309784552579e-02 , 2.70935401594408938e-02 , 2.53005963921950766e-02 , 2.33757473771732879e-02 , 2.13290285989910407e-02 , 1.91711110970663283e-02 , 1.69132460434301447e-02 , 1.45672066307492472e-02 , 1.21452283069194075e-02 , 9.65995071184195045e-03 , 7.12437821578824296e-03 , 4.55199831870070192e-03 , 1.95974512692206372e-03 }, + { 9.99270100318387144e-01 , 9.96158196069257929e-01 , 9.90575916538956935e-01 , 9.82549825211246564e-01 , 9.72119754559097049e-01 , 9.59337629992087937e-01 , 9.44267119143021638e-01 , 9.26983297502355197e-01 , 9.07572269822567446e-01 , 8.86130739624377939e-01 , 8.62765526830358453e-01 , 8.37593035333061176e-01 , 8.10738672951787920e-01 , 7.82336226592735384e-01 , 7.52527195694101092e-01 , 7.21460087262705718e-01 , 6.89289676007353580e-01 , 6.56176233251392960e-01 , 6.22284728464100656e-01 , 5.87784007387758378e-01 , 5.52845950854326640e-01 , 5.17644618482067664e-01 , 4.82355381517932336e-01 , 4.47154049145673360e-01 , 4.12215992612241622e-01 , 3.77715271535899344e-01 , 3.43823766748607096e-01 , 3.10710323992646420e-01 , 2.78539912737294282e-01 , 2.47472804305898852e-01 , 2.17663773407264616e-01 , 1.89261327048212080e-01 , 1.62406964666938824e-01 , 1.37234473169641491e-01 , 1.13869260375622047e-01 , 9.24277301774324989e-02 , 7.30167024976448031e-02 , 5.57328808569783965e-02 , 4.06623700079121117e-02 , 2.78802454409029510e-02 , 1.74501747887534295e-02 , 9.42408346104301603e-03 , 3.84180393074209578e-03 , 7.29899681612887550e-04 }, { 1.87270240155638880e-03 , 4.35024068376242169e-03 , 6.80979337778999261e-03 , 9.23574086840737475e-03 , 1.16157409510096055e-02 , 1.39378914106405051e-02 , 1.61906114060349111e-02 , 1.83626739069044365e-02 , 2.04432561551731104e-02 , 2.24219920409850157e-02 , 2.42890232241760179e-02 , 2.60350480458522299e-02 , 2.76513677818640280e-02 , 2.91299299387977467e-02 , 3.04633683507809852e-02 , 3.16450398666019289e-02 , 3.26690574395907193e-02 , 3.35303194531468285e-02 , 3.42245351346833274e-02 , 3.47482459307862923e-02 , 3.50988427367791081e-02 , 3.52745788946770347e-02 , 3.52745788946770347e-02 , 3.50988427367791081e-02 , 3.47482459307862923e-02 , 3.42245351346833274e-02 , 3.35303194531468285e-02 , 3.26690574395907193e-02 , 3.16450398666019289e-02 , 3.04633683507809852e-02 , 2.91299299387977467e-02 , 2.76513677818640280e-02 , 2.60350480458522299e-02 , 2.42890232241760179e-02 , 2.24219920409850157e-02 , 2.04432561551731104e-02 , 1.83626739069044365e-02 , 1.61906114060349111e-02 , 1.39378914106405051e-02 , 1.16157409510096055e-02 , 9.23574086840737475e-03 , 6.80979337778999261e-03 , 4.35024068376242169e-03 , 1.87270240155638880e-03 }, + { 9.99301822590968336e-01 , 9.96324999223601848e-01 , 9.90984357517270320e-01 , 9.83304155198447272e-01 , 9.73320845497814502e-01 , 9.61081968359500216e-01 , 9.46645835876620878e-01 , 9.30081237980332154e-01 , 9.11467110251043211e-01 , 8.90892156296953175e-01 , 8.68454424472745123e-01 , 8.44260840385600231e-01 , 8.18426697226611655e-01 , 7.91075106284676588e-01 , 7.62336410231458039e-01 , 7.32347561959817539e-01 , 7.01251471929270953e-01 , 6.69196327125301083e-01 , 6.36334884876188722e-01 , 6.02823744891631819e-01 , 5.68822602991626569e-01 , 5.34493490081572098e-01 , 5.00000000000000000e-01 , 4.65506509918427902e-01 , 4.31177397008373486e-01 , 3.97176255108368126e-01 , 3.63665115123811222e-01 , 3.30803672874698917e-01 , 2.98748528070729047e-01 , 2.67652438040182461e-01 , 2.37663589768541961e-01 , 2.08924893715323412e-01 , 1.81573302773388318e-01 , 1.55739159614399741e-01 , 1.31545575527254821e-01 , 1.09107843703046853e-01 , 8.85328897489568306e-02 , 6.99187620196678877e-02 , 5.33541641233791289e-02 , 3.89180316404998047e-02 , 2.66791545021854704e-02 , 1.66958448015526971e-02 , 9.01564248272971637e-03 , 3.67500077639812926e-03 , 6.98177409031680942e-04 }, { 1.79133157764177942e-03 , 4.16159464810912042e-03 , 6.51555249579139229e-03 , 8.83876762896879456e-03 , 1.11199237752893660e-02 , 1.33481069837888319e-02 , 1.55126874672577332e-02 , 1.76033461008045095e-02 , 1.96101183646512252e-02 , 2.15234403545824862e-02 , 2.33341938591866832e-02 , 2.50337496189760138e-02 , 2.66140083656344756e-02 , 2.80674393798932380e-02 , 2.93871163594208694e-02 , 3.05667504155332607e-02 , 3.16007200369099669e-02 , 3.24840978753617171e-02 , 3.32126742249212667e-02 , 3.37829770818037708e-02 , 3.41922886893348404e-02 , 3.44386584888306604e-02 , 3.45209124146160090e-02 , 3.44386584888306604e-02 , 3.41922886893348404e-02 , 3.37829770818037708e-02 , 3.32126742249212667e-02 , 3.24840978753617171e-02 , 3.16007200369099669e-02 , 3.05667504155332607e-02 , 2.93871163594208694e-02 , 2.80674393798932380e-02 , 2.66140083656344756e-02 , 2.50337496189760138e-02 , 2.33341938591866832e-02 , 2.15234403545824862e-02 , 1.96101183646512252e-02 , 1.76033461008045095e-02 , 1.55126874672577332e-02 , 1.33481069837888319e-02 , 1.11199237752893660e-02 , 8.83876762896879456e-03 , 6.51555249579139229e-03 , 4.16159464810912042e-03 , 1.79133157764177942e-03 }, + { 9.99331521066908923e-01 , 9.96481174453087148e-01 , 9.91366834902083438e-01 , 9.84010695926995971e-01 , 9.74446181723044869e-01 , 9.62716899403377013e-01 , 9.48876355766970936e-01 , 9.32987697433429020e-01 , 9.15123418533033028e-01 , 8.95365028537637109e-01 , 8.73802679807832994e-01 , 8.50534756010202786e-01 , 8.25667423100998832e-01 , 7.99314144856357545e-01 , 7.71595165130901317e-01 , 7.42636959194082347e-01 , 7.12571656641414197e-01 , 6.81536438510497833e-01 , 6.49672911350934967e-01 , 6.17126461103134849e-01 , 5.84045589733551807e-01 , 5.50581237652792099e-01 , 5.16886095008026070e-01 , 4.83113904991973986e-01 , 4.49418762347207901e-01 , 4.15954410266448249e-01 , 3.82873538896865095e-01 , 3.50327088649064977e-01 , 3.18463561489502167e-01 , 2.87428343358585803e-01 , 2.57363040805917653e-01 , 2.28404834869098683e-01 , 2.00685855143642428e-01 , 1.74332576899001140e-01 , 1.49465243989797159e-01 , 1.26197320192166978e-01 , 1.04634971462362877e-01 , 8.48765814669669716e-02 , 6.70123025665709665e-02 , 5.11236442330290156e-02 , 3.72831005966230214e-02 , 2.55538182769551037e-02 , 1.59893040730040292e-02 , 8.63316509791656889e-03 , 3.51882554691281772e-03 , 6.68478933091009426e-04 }, { 1.71515043405352416e-03 , 3.98494911486231129e-03 , 6.23994188549434163e-03 , 8.46675700391811940e-03 , 1.06549993770682500e-02 , 1.27946431985650061e-02 , 1.48759147761013781e-02 , 1.68893139995534500e-02 , 1.88256526786930341e-02 , 2.06760950548393642e-02 , 2.24321976386590641e-02 , 2.40859475508561002e-02 , 2.56297990035715094e-02 , 2.70567076929283772e-02 , 2.83601629219956165e-02 , 2.95342172977731583e-02 , 3.05735138623252391e-02 , 3.14733105321972559e-02 , 3.22295017335695322e-02 , 3.28386371338906038e-02 , 3.32979373842274412e-02 , 3.36053068003390881e-02 , 3.37593429245182305e-02 , 3.37593429245182305e-02 , 3.36053068003390881e-02 , 3.32979373842274412e-02 , 3.28386371338906038e-02 , 3.22295017335695322e-02 , 3.14733105321972559e-02 , 3.05735138623252391e-02 , 2.95342172977731583e-02 , 2.83601629219956165e-02 , 2.70567076929283772e-02 , 2.56297990035715094e-02 , 2.40859475508561002e-02 , 2.24321976386590641e-02 , 2.06760950548393642e-02 , 1.88256526786930341e-02 , 1.68893139995534500e-02 , 1.48759147761013781e-02 , 1.27946431985650061e-02 , 1.06549993770682500e-02 , 8.46675700391811940e-03 , 6.23994188549434163e-03 , 3.98494911486231129e-03 , 1.71515043405352416e-03 }, + { 9.99359364292106034e-01 , 9.96627605493884294e-01 , 9.91725501535811849e-01 , 9.84673393663282215e-01 , 9.75501984628854180e-01 , 9.64251346506180274e-01 , 9.50970664719262615e-01 , 9.35718007898448167e-01 , 9.18560069949951097e-01 , 8.99571877083870985e-01 , 8.78836459222719357e-01 , 8.56444486704532104e-01 , 8.32493873695166364e-01 , 8.07089349978186821e-01 , 7.80342002967332138e-01 , 7.52368791931788961e-01 , 7.23292036552427797e-01 , 6.93238882042333526e-01 , 6.62340743168867929e-01 , 6.30732729607487275e-01 , 5.98553055139555923e-01 , 5.65942433277257462e-01 , 5.33043461958177867e-01 , 5.00000000000000000e-01 , 4.66956538041822133e-01 , 4.34057566722742538e-01 , 4.01446944860444077e-01 , 3.69267270392512725e-01 , 3.37659256831132071e-01 , 3.06761117957666418e-01 , 2.76707963447572147e-01 , 2.47631208068211039e-01 , 2.19657997032667890e-01 , 1.92910650021813179e-01 , 1.67506126304833636e-01 , 1.43555513295467840e-01 , 1.21163540777280684e-01 , 1.00428122916129028e-01 , 8.14399300500489448e-02 , 6.42819921015518464e-02 , 4.90293352807373226e-02 , 3.57486534938196779e-02 , 2.44980153711457788e-02 , 1.53266063367177505e-02 , 8.27449846418814618e-03 , 3.37239450611568270e-03 , 6.40635707893945361e-04 }, { 1.64372692126400744e-03 , 3.81930814792441663e-03 , 5.98142423215616056e-03 , 8.11766657321652887e-03 , 1.02184690738342139e-02 , 1.22746058298294092e-02 , 1.42770753503216937e-02 , 1.62171177575923774e-02 , 1.80862482920874749e-02 , 1.98762930612655028e-02 , 2.15794243242397703e-02 , 2.31881945432529553e-02 , 2.46955688736805838e-02 , 2.60949558900285712e-02 , 2.73802363907651135e-02 , 2.85457901466157696e-02 , 2.95865204711694384e-02 , 3.04978765043698238e-02 , 3.12758731104608306e-02 , 3.19171083028585156e-02 , 3.24187781194728644e-02 , 3.27786888832748702e-02 , 3.29952667944052383e-02 , 3.30675648118277377e-02 , 3.29952667944052383e-02 , 3.27786888832748702e-02 , 3.24187781194728644e-02 , 3.19171083028585156e-02 , 3.12758731104608306e-02 , 3.04978765043698238e-02 , 2.95865204711694384e-02 , 2.85457901466157696e-02 , 2.73802363907651135e-02 , 2.60949558900285712e-02 , 2.46955688736805838e-02 , 2.31881945432529553e-02 , 2.15794243242397703e-02 , 1.98762930612655028e-02 , 1.80862482920874749e-02 , 1.62171177575923774e-02 , 1.42770753503216937e-02 , 1.22746058298294092e-02 , 1.02184690738342139e-02 , 8.11766657321652887e-03 , 5.98142423215616056e-03 , 3.81930814792441663e-03 , 1.64372692126400744e-03 }, + { 9.99385503626213034e-01 , 9.96765086133175382e-01 , 9.92062291861413481e-01 , 9.85295796273123581e-01 , 9.76493851580215400e-01 , 9.65693345353277222e-01 , 9.52939568357784816e-01 , 9.38286010137123982e-01 , 9.21794130812196744e-01 , 9.03533102014721257e-01 , 8.83579516257870123e-01 , 8.62017065461907261e-01 , 8.38936189816331890e-01 , 8.14433698388256744e-01 , 7.88612363041986342e-01 , 7.61580487361116498e-01 , 7.33451452375479152e-01 , 7.04343240995358388e-01 , 6.74377943146080350e-01 , 6.43681243677727832e-01 , 6.12381895197344539e-01 , 5.80611178034445841e-01 , 5.48502349604731321e-01 , 5.16190085481434635e-01 , 4.83809914518565309e-01 , 4.51497650395268624e-01 , 4.19388821965554159e-01 , 3.87618104802655461e-01 , 3.56318756322272223e-01 , 3.25622056853919650e-01 , 2.95656759004641612e-01 , 2.66548547624520793e-01 , 2.38419512638883474e-01 , 2.11387636958013658e-01 , 1.85566301611743201e-01 , 1.61063810183668055e-01 , 1.37982934538092683e-01 , 1.16420483742129835e-01 , 9.64668979852786879e-02 , 7.82058691878032286e-02 , 6.17139898628760591e-02 , 4.70604316422151628e-02 , 3.43066546467228339e-02 , 2.35061484197845692e-02 , 1.47042037268763741e-02 , 7.93770813858657096e-03 , 3.23491386682462105e-03 , 6.14496373786940710e-04 }, { 1.57667302615291925e-03 , 3.66377695063813125e-03 , 5.73861728961726995e-03 , 7.78965786147192436e-03 , 9.80808022867776449e-03 , 1.17853804196621885e-02 , 1.37132548541784739e-02 , 1.55836139163990448e-02 , 1.73886112823852176e-02 , 1.91206755329153544e-02 , 2.07725414717323739e-02 , 2.23372804283471400e-02 , 2.38083292462452356e-02 , 2.51795177769272363e-02 , 2.64450947425968336e-02 , 2.75997518499920824e-02 , 2.86386460502016070e-02 , 2.95574198491978177e-02 , 3.03522195829469404e-02 , 3.10197115799463324e-02 , 3.15570961431270100e-02 , 3.19621192923240927e-02 , 3.22330822179750440e-02 , 3.23688484063419588e-02 , 3.23688484063419588e-02 , 3.22330822179750440e-02 , 3.19621192923240927e-02 , 3.15570961431270100e-02 , 3.10197115799463324e-02 , 3.03522195829469404e-02 , 2.95574198491978177e-02 , 2.86386460502016070e-02 , 2.75997518499920824e-02 , 2.64450947425968336e-02 , 2.51795177769272363e-02 , 2.38083292462452356e-02 , 2.23372804283471400e-02 , 2.07725414717323739e-02 , 1.91206755329153544e-02 , 1.73886112823852176e-02 , 1.55836139163990448e-02 , 1.37132548541784739e-02 , 1.17853804196621885e-02 , 9.80808022867776449e-03 , 7.78965786147192436e-03 , 5.73861728961726995e-03 , 3.66377695063813125e-03 , 1.57667302615291925e-03 }, + { 9.99410075303317713e-01 , 9.96894330972083909e-01 , 9.92378947957106461e-01 , 9.85881100450777703e-01 , 9.77426829337068592e-01 , 9.67050147377905067e-01 , 9.54792827914036635e-01 , 9.40704222786504451e-01 , 9.24841059922082875e-01 , 9.07267213679927687e-01 , 8.88053447172723276e-01 , 8.67277127118701308e-01 , 8.45021912212566062e-01 , 8.21377416209618794e-01 , 7.96438847054450338e-01 , 7.70306623495862985e-01 , 7.43085970726246048e-01 , 7.14886496670788296e-01 , 6.85821750631142479e-01 , 6.56008766059874349e-01 , 6.25567589306288641e-01 , 5.94620796230906801e-01 , 5.63292998634836062e-01 , 5.31710342491343413e-01 , 5.00000000000000000e-01 , 4.68289657508656587e-01 , 4.36707001365163994e-01 , 4.05379203769093199e-01 , 3.74432410693711359e-01 , 3.43991233940125596e-01 , 3.14178249368857576e-01 , 2.85113503329211759e-01 , 2.56914029273753952e-01 , 2.29693376504136959e-01 , 2.03561152945549634e-01 , 1.78622583790381151e-01 , 1.54978087787433938e-01 , 1.32722872881298637e-01 , 1.11946552827276682e-01 , 9.27327863200722857e-02 , 7.51589400779171524e-02 , 5.92957772134955416e-02 , 4.52071720859633583e-02 , 3.29498526220949259e-02 , 2.25731706629313834e-02 , 1.41188995492223107e-02 , 7.62105204289349747e-03 , 3.10566902791610446e-03 , 5.89924696682310283e-04 }, { 1.51363949446145247e-03 , 3.51754979504322572e-03 , 5.51027551579679007e-03 , 7.48107246781232541e-03 , 9.42179792654472895e-03 , 1.13246007937233377e-02 , 1.31818094635330080e-02 , 1.49859423102919123e-02 , 1.67297333958110889e-02 , 1.84061604815003443e-02 , 2.00084728831865094e-02 , 2.15302184906297975e-02 , 2.29652696777979254e-02 , 2.43078479439141210e-02 , 2.55525471650722945e-02 , 2.66943553541294856e-02 , 2.77286748374017955e-02 , 2.86513407650937357e-02 , 2.94586378800136342e-02 , 3.01473154765760087e-02 , 3.07146004895964692e-02 , 3.11582086600286322e-02 , 3.14763537325978490e-02 , 3.16677546482458730e-02 , 3.17316407023953001e-02 , 3.16677546482458730e-02 , 3.14763537325978490e-02 , 3.11582086600286322e-02 , 3.07146004895964692e-02 , 3.01473154765760087e-02 , 2.94586378800136342e-02 , 2.86513407650937357e-02 , 2.77286748374017955e-02 , 2.66943553541294856e-02 , 2.55525471650722945e-02 , 2.43078479439141210e-02 , 2.29652696777979254e-02 , 2.15302184906297975e-02 , 2.00084728831865094e-02 , 1.84061604815003443e-02 , 1.67297333958110889e-02 , 1.49859423102919123e-02 , 1.31818094635330080e-02 , 1.13246007937233377e-02 , 9.42179792654472895e-03 , 7.48107246781232541e-03 , 5.51027551579679007e-03 , 3.51754979504322572e-03 , 1.51363949446145247e-03 }, + { 9.99433202210035510e-01 , 9.97015984716045356e-01 , 9.92677042024002976e-01 , 9.86432192553346021e-01 , 9.78305477621403963e-01 , 9.68328309472438975e-01 , 9.56539278327895981e-01 , 9.42983989761806529e-01 , 9.27714884714972987e-01 , 9.10791035429667994e-01 , 8.92277916450199604e-01 , 8.72247151113034302e-01 , 8.50776234353411098e-01 , 8.27948232842719678e-01 , 8.03851463592475168e-01 , 7.78579152257324991e-01 , 7.52229072453732051e-01 , 7.24903167487019440e-01 , 6.96707155948782519e-01 , 6.67750122709718674e-01 , 6.38144096889766033e-01 , 6.08003618438020865e-01 , 5.77445294999072933e-01 , 5.46587350780043058e-01 , 5.15549169163594390e-01 , 4.84450830836405555e-01 , 4.53412649219956942e-01 , 4.22554705000927067e-01 , 3.91996381561979135e-01 , 3.61855903110234023e-01 , 3.32249877290281326e-01 , 3.03292844051217425e-01 , 2.75096832512980616e-01 , 2.47770927546267894e-01 , 2.21420847742674981e-01 , 1.96148536407524887e-01 , 1.72051767157280322e-01 , 1.49223765646588874e-01 , 1.27752848886965725e-01 , 1.07722083549800368e-01 , 8.92089645703320194e-02 , 7.22851152850269574e-02 , 5.70160102381934777e-02 , 4.34607216721040537e-02 , 3.16716905275610319e-02 , 2.16945223785960269e-02 , 1.35678074466539633e-02 , 7.32295797599705894e-03 , 2.98401528395464367e-03 , 5.66797789964474871e-04 }, { 1.45431127657757054e-03 , 3.37989959787270058e-03 , 5.29527419182548430e-03 , 7.19041138074278698e-03 , 9.05778035674469420e-03 , 1.08901215850623970e-02 , 1.26803367850061958e-02 , 1.44214967902675986e-02 , 1.61068641117890071e-02 , 1.77299178075730757e-02 , 1.92843783062938388e-02 , 2.07642315450738482e-02 , 2.21637521694016369e-02 , 2.34775256519742168e-02 , 2.47004692247331584e-02 , 2.58278515347905684e-02 , 2.68553109444981224e-02 , 2.77788724031062598e-02 , 2.85949628238641902e-02 , 2.93004249066112221e-02 , 2.98925293521327268e-02 , 3.03689854208851091e-02 , 3.07279497951583325e-02 , 3.09680337103416213e-02 , 3.10883083276736298e-02 , 3.10883083276736298e-02 , 3.09680337103416213e-02 , 3.07279497951583325e-02 , 3.03689854208851091e-02 , 2.98925293521327268e-02 , 2.93004249066112221e-02 , 2.85949628238641902e-02 , 2.77788724031062598e-02 , 2.68553109444981224e-02 , 2.58278515347905684e-02 , 2.47004692247331584e-02 , 2.34775256519742168e-02 , 2.21637521694016369e-02 , 2.07642315450738482e-02 , 1.92843783062938388e-02 , 1.77299178075730757e-02 , 1.61068641117890071e-02 , 1.44214967902675986e-02 , 1.26803367850061958e-02 , 1.08901215850623970e-02 , 9.05778035674469420e-03 , 7.19041138074278698e-03 , 5.29527419182548430e-03 , 3.37989959787270058e-03 , 1.45431127657757054e-03 }, + { 9.99454995424451709e-01 , 9.97130630218376224e-01 , 9.92957995867951526e-01 , 9.86951684009661934e-01 , 9.79133924306954118e-01 , 9.69533772001481164e-01 , 9.58186931154890065e-01 , 9.45135609014763678e-01 , 9.30428355591146117e-01 , 9.14119881911532373e-01 , 8.96270856049690590e-01 , 8.76947677242687740e-01 , 8.56222228788518280e-01 , 8.34171610587685075e-01 , 8.10877852300361690e-01 , 7.86427608175651938e-01 , 7.60911834683092869e-01 , 7.34425452143020463e-01 , 7.07066991613151896e-01 , 6.78938228344204697e-01 , 6.50143803167665957e-01 , 6.20790833223899385e-01 , 5.90988513478538757e-01 , 5.60847710509444375e-01 , 5.30480550075289381e-01 , 5.00000000000000000e-01 , 4.69519449924710619e-01 , 4.39152289490555625e-01 , 4.09011486521461243e-01 , 3.79209166776100615e-01 , 3.49856196832334043e-01 , 3.21061771655795247e-01 , 2.92933008386848048e-01 , 2.65574547856979482e-01 , 2.39088165316907075e-01 , 2.13572391824348090e-01 , 1.89122147699638365e-01 , 1.65828389412314953e-01 , 1.43777771211481664e-01 , 1.23052322757312232e-01 , 1.03729143950309396e-01 , 8.58801180884675858e-02 , 6.95716444088538138e-02 , 5.48643909852363498e-02 , 4.18130688451098867e-02 , 3.04662279985188078e-02 , 2.08660756930459032e-02 , 1.30483159903380663e-02 , 7.04200413204850162e-03 , 2.86936978162371289e-03 , 5.45004575548252370e-04 }, { 1.39840358554494770e-03 , 3.25016889162630003e-03 , 5.09259564891086525e-03 , 6.91631700323891083e-03 , 8.71435736170052613e-03 , 1.04799942008516056e-02 , 1.22066502868907172e-02 , 1.38878992970812385e-02 , 1.55174856450800043e-02 , 1.70893466020941680e-02 , 1.85976344616301456e-02 , 2.00367381427482283e-02 , 2.14013039989400418e-02 , 2.26862557038250354e-02 , 2.38868131203115522e-02 , 2.49985100750287036e-02 , 2.60172109683485427e-02 , 2.69391261565227816e-02 , 2.77608260478693462e-02 , 2.84792538601293319e-02 , 2.90917369912960695e-02 , 2.95959969614807729e-02 , 2.99901578887516243e-02 , 3.02727534673688965e-02 , 3.04427324224281724e-02 , 3.04994624206029394e-02 , 3.04427324224281724e-02 , 3.02727534673688965e-02 , 2.99901578887516243e-02 , 2.95959969614807729e-02 , 2.90917369912960695e-02 , 2.84792538601293319e-02 , 2.77608260478693462e-02 , 2.69391261565227816e-02 , 2.60172109683485427e-02 , 2.49985100750287036e-02 , 2.38868131203115522e-02 , 2.26862557038250354e-02 , 2.14013039989400418e-02 , 2.00367381427482283e-02 , 1.85976344616301456e-02 , 1.70893466020941680e-02 , 1.55174856450800043e-02 , 1.38878992970812385e-02 , 1.22066502868907172e-02 , 1.04799942008516056e-02 , 8.71435736170052613e-03 , 6.91631700323891083e-03 , 5.09259564891086525e-03 , 3.25016889162630003e-03 , 1.39840358554494770e-03 }, + { 9.99475555551975092e-01 , 9.97238795464608030e-01 , 9.93223097825774892e-01 , 9.87441942110872217e-01 , 9.79915913466543276e-01 , 9.70671926820679487e-01 , 9.59743064458212225e-01 , 9.47168445267247638e-01 , 9.32993081423033832e-01 , 9.17267716163367219e-01 , 9.00048641715234132e-01 , 8.81397497596872470e-01 , 8.61381049874991644e-01 , 8.40070952113583846e-01 , 8.17543488847622957e-01 , 7.93879302489789551e-01 , 7.69163104642913709e-01 , 7.43483372849047974e-01 , 7.16932033859380868e-01 , 6.89604134558046811e-01 , 6.61597501717403946e-01 , 6.33012391802500907e-01 , 6.03951132078183073e-01 , 5.74517754303474626e-01 , 5.44817622324450301e-01 , 5.14957054898669386e-01 , 4.85042945101330614e-01 , 4.55182377675549699e-01 , 4.25482245696525430e-01 , 3.96048867921816983e-01 , 3.66987608197499093e-01 , 3.38402498282596109e-01 , 3.10395865441953189e-01 , 2.83067966140619187e-01 , 2.56516627150951970e-01 , 2.30836895357086291e-01 , 2.06120697510210449e-01 , 1.82456511152377043e-01 , 1.59929047886416154e-01 , 1.38618950125008411e-01 , 1.18602502403127516e-01 , 9.99513582847658399e-02 , 8.27322838366327251e-02 , 6.70069185769662096e-02 , 5.28315547327523408e-02 , 4.02569355417877334e-02 , 2.93280731793204713e-02 , 2.00840865334567242e-02 , 1.25580578891277481e-02 , 6.77690217422507925e-03 , 2.76120453539198526e-03 , 5.24444448024860913e-04 }, { 1.34565847502355566e-03 , 3.12776198148663823e-03 , 4.90131728973137570e-03 , 6.65755749117048073e-03 , 8.39001169815036842e-03 , 1.00924457539903964e-02 , 1.17587567769922314e-02 , 1.33829768732520067e-02 , 1.49592905735719730e-02 , 1.64820545448594001e-02 , 1.79458174175486165e-02 , 1.93453391552119887e-02 , 2.06756097502801342e-02 , 2.19318671295002030e-02 , 2.31096141863923951e-02 , 2.42046348720374484e-02 , 2.52130092831711894e-02 , 2.61311276919534950e-02 , 2.69557034663786312e-02 , 2.76837848346513267e-02 , 2.83127654511842984e-02 , 2.88403937262634129e-02 , 2.92647808859069353e-02 , 2.95844077330214839e-02 , 2.97981300856240798e-02 , 2.99051828726459301e-02 , 2.99051828726459301e-02 , 2.97981300856240798e-02 , 2.95844077330214839e-02 , 2.92647808859069353e-02 , 2.88403937262634129e-02 , 2.83127654511842984e-02 , 2.76837848346513267e-02 , 2.69557034663786312e-02 , 2.61311276919534950e-02 , 2.52130092831711894e-02 , 2.42046348720374484e-02 , 2.31096141863923951e-02 , 2.19318671295002030e-02 , 2.06756097502801342e-02 , 1.93453391552119887e-02 , 1.79458174175486165e-02 , 1.64820545448594001e-02 , 1.49592905735719730e-02 , 1.33829768732520067e-02 , 1.17587567769922314e-02 , 1.00924457539903964e-02 , 8.39001169815036842e-03 , 6.65755749117048073e-03 , 4.90131728973137570e-03 , 3.12776198148663823e-03 , 1.34565847502355566e-03 }, + { 9.99494973888164107e-01 , 9.97340959654003489e-01 , 9.93473517511685777e-01 , 9.87905116857492271e-01 , 9.80654847311568156e-01 , 9.71747676732220955e-01 , 9.61214301521406078e-01 , 9.49091028937713244e-01 , 9.35419648779120649e-01 , 9.20247288272900699e-01 , 9.03626249208447696e-01 , 8.85613827462766179e-01 , 8.66272115403755150e-01 , 8.45667787800683302e-01 , 8.23871871958255064e-01 , 8.00959502856884664e-01 , 7.77009664138533895e-01 , 7.52104915828566756e-01 , 7.26331109730922853e-01 , 6.99777093476976475e-01 , 6.72534404247861151e-01 , 6.44696953225813107e-01 , 6.16360701862136318e-01 , 5.87623331077662847e-01 , 5.58583904535977616e-01 , 5.29342527150129749e-01 , 5.00000000000000000e-01 , 4.70657472849870251e-01 , 4.41416095464022440e-01 , 4.12376668922337097e-01 , 3.83639298137863682e-01 , 3.55303046774186893e-01 , 3.27465595752138849e-01 , 3.00222906523023525e-01 , 2.73668890269077092e-01 , 2.47895084171433272e-01 , 2.22990335861466049e-01 , 1.99040497143115336e-01 , 1.76128128041744964e-01 , 1.54332212199316643e-01 , 1.33727884596244878e-01 , 1.14386172537233849e-01 , 9.63737507915522623e-02 , 7.97527117270993152e-02 , 6.45803512208793229e-02 , 5.09089710622866870e-02 , 3.87856984785939357e-02 , 2.82523232677790587e-02 , 1.93451526884318332e-02 , 1.20948831425077095e-02 , 6.52648248831423899e-03 , 2.65904034599646075e-03 , 5.05026111835886471e-04 }, { 1.29584186028351592e-03 , 3.01213811347433684e-03 , 4.72060114247017243e-03 , 6.41301307212018955e-03 , 8.08336262834373140e-03 , 9.72586055381844707e-03 , 1.13348365285351037e-02 , 1.29047412553787589e-02 , 1.44301618089118684e-02 , 1.59058392295096628e-02 , 1.73266862917671183e-02 , 1.86878049017414581e-02 , 1.99845029217701892e-02 , 2.12123103172600080e-02 , 2.23669945518364041e-02 , 2.34445751703751572e-02 , 2.44413375163495712e-02 , 2.53538455346463583e-02 , 2.61789536149363601e-02 , 2.69138174343655154e-02 , 2.75559037619667983e-02 , 2.81029991908698547e-02 , 2.85532177681335972e-02 , 2.89050074958565988e-02 , 2.91571556811280053e-02 , 2.93087931163601295e-02 , 2.93593970755821818e-02 , 2.93087931163601295e-02 , 2.91571556811280053e-02 , 2.89050074958565988e-02 , 2.85532177681335972e-02 , 2.81029991908698547e-02 , 2.75559037619667983e-02 , 2.69138174343655154e-02 , 2.61789536149363601e-02 , 2.53538455346463583e-02 , 2.44413375163495712e-02 , 2.34445751703751572e-02 , 2.23669945518364041e-02 , 2.12123103172600080e-02 , 1.99845029217701892e-02 , 1.86878049017414581e-02 , 1.73266862917671183e-02 , 1.59058392295096628e-02 , 1.44301618089118684e-02 , 1.29047412553787589e-02 , 1.13348365285351037e-02 , 9.72586055381844707e-03 , 8.08336262834373140e-03 , 6.41301307212018955e-03 , 4.72060114247017243e-03 , 3.01213811347433684e-03 , 1.29584186028351592e-03 }, + { 9.99513333433670437e-01 , 9.97437558509169486e-01 , 9.93710318698671768e-01 , 9.88343164428951648e-01 , 9.81353822892961802e-01 , 9.72765487582497923e-01 , 9.62606679933325715e-01 , 9.50911143142350812e-01 , 9.37717727032784443e-01 , 9.23070257985386444e-01 , 9.07017392956783963e-01 , 8.89612457673127022e-01 , 8.70913269404592127e-01 , 8.50981944859586448e-01 , 8.29884693815991614e-01 , 8.07691599165563656e-01 , 7.84476384097604673e-01 , 7.60316167192966574e-01 , 7.35291206240691109e-01 , 7.09484631627602225e-01 , 6.82982170186095638e-01 , 6.55871860417234109e-01 , 6.28243760034998600e-01 , 6.00189646803106824e-01 , 5.71802713658128070e-01 , 5.43177259131624068e-01 , 5.14408374099670884e-01 , 4.85591625900329116e-01 , 4.56822740868375876e-01 , 4.28197286341871930e-01 , 3.99810353196893231e-01 , 3.71756239965001345e-01 , 3.44128139582765891e-01 , 3.17017829813904417e-01 , 2.90515368372397720e-01 , 2.64708793759308836e-01 , 2.39683832807033453e-01 , 2.15523615902395271e-01 , 1.92308400834436316e-01 , 1.70115306184008441e-01 , 1.49018055140413552e-01 , 1.29086730595407845e-01 , 1.10387542326872992e-01 , 9.29826070432160784e-02 , 7.69297420146135280e-02 , 6.22822729672155295e-02 , 4.90888568576492088e-02 , 3.73933200666742571e-02 , 2.72345124175020735e-02 , 1.86461771070382080e-02 , 1.16568355710483813e-02 , 6.28968130132822115e-03 , 2.56244149083055756e-03 , 4.86666566329508048e-04 }, { 1.24874091788079299e-03 , 2.90280550761999254e-03 , 4.54968472775469854e-03 , 6.18166406442382209e-03 , 7.79315151796206550e-03 , 9.37876381073468948e-03 , 1.09332257114265422e-02 , 1.24513707336043871e-02 , 1.39281546552979356e-02 , 1.53586712489353384e-02 , 1.67381682321863234e-02 , 1.80620629201917772e-02 , 1.93259573910512586e-02 , 2.05256530683224879e-02 , 2.16571646547985067e-02 , 2.27167333641383577e-02 , 2.37008394032224949e-02 , 2.46062136622644430e-02 , 2.54298485730940702e-02 , 2.61690080991493733e-02 , 2.68212368237768055e-02 , 2.73843681065289932e-02 , 2.78565312802949924e-02 , 2.82361578653129823e-02 , 2.85219867793972993e-02 , 2.87130685270560564e-02 , 2.88087683535735127e-02 , 2.88087683535735127e-02 , 2.87130685270560564e-02 , 2.85219867793972993e-02 , 2.82361578653129823e-02 , 2.78565312802949924e-02 , 2.73843681065289932e-02 , 2.68212368237768055e-02 , 2.61690080991493733e-02 , 2.54298485730940702e-02 , 2.46062136622644430e-02 , 2.37008394032224949e-02 , 2.27167333641383577e-02 , 2.16571646547985067e-02 , 2.05256530683224879e-02 , 1.93259573910512586e-02 , 1.80620629201917772e-02 , 1.67381682321863234e-02 , 1.53586712489353384e-02 , 1.39281546552979356e-02 , 1.24513707336043871e-02 , 1.09332257114265422e-02 , 9.37876381073468948e-03 , 7.79315151796206550e-03 , 6.18166406442382209e-03 , 4.54968472775469854e-03 , 2.90280550761999254e-03 , 1.24874091788079299e-03 }, + { 9.99530709782409321e-01 , 9.97528988923705895e-01 , 9.93934470599444619e-01 , 9.88757867751994590e-01 , 9.82015664296567614e-01 , 9.73729434020605411e-01 , 9.63925712360395814e-01 , 9.52635900371999966e-01 , 9.39896161209947789e-01 , 9.25747303308577241e-01 , 9.10234649279660468e-01 , 8.93407890563811202e-01 , 8.75320928174010970e-01 , 8.56031699993318851e-01 , 8.35601995159913180e-01 , 8.14097256124964086e-01 , 7.91586369013016045e-01 , 7.68141442954171638e-01 , 7.43837579093737045e-01 , 7.18752630018587246e-01 , 6.92966950370489720e-01 , 6.66563139445011887e-01 , 6.39625776600403317e-01 , 6.12241150323922789e-01 , 5.84496981823436568e-01 , 5.56482144029664672e-01 , 5.28286376909168354e-01 , 5.00000000000000000e-01 , 4.71713623090831591e-01 , 4.43517855970335384e-01 , 4.15503018176563377e-01 , 3.87758849676077266e-01 , 3.60374223399596738e-01 , 3.33436860554988057e-01 , 3.07033049629510280e-01 , 2.81247369981412698e-01 , 2.56162420906262955e-01 , 2.31858557045828362e-01 , 2.08413630986983955e-01 , 1.85902743875035914e-01 , 1.64398004840086792e-01 , 1.43968300006681094e-01 , 1.24679071825989043e-01 , 1.06592109436188812e-01 , 8.97653507203395457e-02 , 7.42526966914227593e-02 , 6.01038387900522456e-02 , 4.73640996279999851e-02 , 3.60742876396041509e-02 , 2.62705659793946306e-02 , 1.79843357034323997e-02 , 1.12421322480053959e-02 , 6.06552940055540054e-03 , 2.47101107629406260e-03 , 4.69290217590729263e-04 }, { 1.20416180998989442e-03 , 2.79931613328038374e-03 , 4.38787305352926395e-03 , 5.96258035992430595e-03 , 7.51822916675589422e-03 , 9.04980726036453201e-03 , 1.05524008340082270e-02 , 1.20211940048628105e-02 , 1.34514807281981355e-02 , 1.48386788825805201e-02 , 1.61783446130929140e-02 , 1.74661864367949421e-02 , 1.86980789339827730e-02 , 1.98700759371685902e-02 , 2.09784231588593800e-02 , 2.20195702108032937e-02 , 2.29901819731419196e-02 , 2.38871492756003480e-02 , 2.47075988557758711e-02 , 2.54489025622469875e-02 , 2.61086857728160433e-02 , 2.66848350008027368e-02 , 2.71755046649555521e-02 , 2.75791230012543444e-02 , 2.78943970976420416e-02 , 2.81203170355421826e-02 , 2.82561591248860003e-02 , 2.83014882222802112e-02 , 2.82561591248860003e-02 , 2.81203170355421826e-02 , 2.78943970976420416e-02 , 2.75791230012543444e-02 , 2.71755046649555521e-02 , 2.66848350008027368e-02 , 2.61086857728160433e-02 , 2.54489025622469875e-02 , 2.47075988557758711e-02 , 2.38871492756003480e-02 , 2.29901819731419196e-02 , 2.20195702108032937e-02 , 2.09784231588593800e-02 , 1.98700759371685902e-02 , 1.86980789339827730e-02 , 1.74661864367949421e-02 , 1.61783446130929140e-02 , 1.48386788825805201e-02 , 1.34514807281981355e-02 , 1.20211940048628105e-02 , 1.05524008340082270e-02 , 9.04980726036453201e-03 , 7.51822916675589422e-03 , 5.96258035992430595e-03 , 4.38787305352926395e-03 , 2.79931613328038374e-03 , 1.20416180998989442e-03 }, + { 9.99547171900732834e-01 , 9.97615613040534921e-01 , 9.94146857770080716e-01 , 9.89150854570128191e-01 , 9.82642950952745120e-01 , 9.74643239780981330e-01 , 9.65176440123748147e-01 , 9.54271810210327698e-01 , 9.41963054163913793e-01 , 9.28288216881374306e-01 , 9.13289566071440850e-01 , 8.97013461446933280e-01 , 8.79510211352564464e-01 , 8.60833917225094059e-01 , 8.41042306347235202e-01 , 8.20196553403503392e-01 , 7.98361091385331623e-01 , 7.75603412427767314e-01 , 7.51993859192190861e-01 , 7.27605407439229745e-01 , 7.02513440463545580e-01 , 6.76795516087477234e-01 , 6.50531126933610371e-01 , 6.23801454717168635e-01 , 5.96689119317637573e-01 , 5.69277923405188124e-01 , 5.41652593411217742e-01 , 5.13898517643637698e-01 , 4.86101482356362302e-01 , 4.58347406588782313e-01 , 4.30722076594811876e-01 , 4.03310880682362372e-01 , 3.76198545282831365e-01 , 3.49468873066389685e-01 , 3.23204483912522766e-01 , 2.97486559536454365e-01 , 2.72394592560770199e-01 , 2.48006140807809139e-01 , 2.24396587572232686e-01 , 2.01638908614668350e-01 , 1.79803446596496552e-01 , 1.58957693652764770e-01 , 1.39166082774905969e-01 , 1.20489788647435550e-01 , 1.02986538553066748e-01 , 8.67104339285591774e-02 , 7.17117831186256799e-02 , 5.80369458360862275e-02 , 4.57281897896722536e-02 , 3.48235598762518528e-02 , 2.53567602190186807e-02 , 1.73570490472549077e-02 , 1.08491454298718076e-02 , 5.85314222991924465e-03 , 2.38438695946512633e-03 , 4.52828099267207798e-04 }, { 1.16192768788660780e-03 , 2.70126112300766909e-03 , 4.23453158165394347e-03 , 5.75491217019169152e-03 , 7.25754463901073614e-03 , 8.73775645570047318e-03 , 1.01909649412012856e-02 , 1.16126757812826577e-02 , 1.29984935291959751e-02 , 1.43441342369113704e-02 , 1.56454383736552224e-02 , 1.68983835578058808e-02 , 1.80990969361575944e-02 , 1.92438671296238303e-02 , 2.03291556923722583e-02 , 2.13516080423335440e-02 , 2.23080638263461403e-02 , 2.31955666865009472e-02 , 2.40113733968001300e-02 , 2.47529623415237883e-02 , 2.54180413088992418e-02 , 2.60045545758707010e-02 , 2.65106892620053831e-02 , 2.69348809328572442e-02 , 2.72758184354447118e-02 , 2.75324479508812121e-02 , 2.77039762516225613e-02 , 2.77898731532571983e-02 , 2.77898731532571983e-02 , 2.77039762516225613e-02 , 2.75324479508812121e-02 , 2.72758184354447118e-02 , 2.69348809328572442e-02 , 2.65106892620053831e-02 , 2.60045545758707010e-02 , 2.54180413088992418e-02 , 2.47529623415237883e-02 , 2.40113733968001300e-02 , 2.31955666865009472e-02 , 2.23080638263461403e-02 , 2.13516080423335440e-02 , 2.03291556923722583e-02 , 1.92438671296238303e-02 , 1.80990969361575944e-02 , 1.68983835578058808e-02 , 1.56454383736552224e-02 , 1.43441342369113704e-02 , 1.29984935291959751e-02 , 1.16126757812826577e-02 , 1.01909649412012856e-02 , 8.73775645570047318e-03 , 7.25754463901073614e-03 , 5.75491217019169152e-03 , 4.23453158165394347e-03 , 2.70126112300766909e-03 , 1.16192768788660780e-03 }, + { 9.99562782812631445e-01 , 9.97697761839215103e-01 , 9.94348288825111060e-01 , 9.89523613354734377e-01 , 9.83238042585943273e-01 , 9.75510313223938330e-01 , 9.66363480533550812e-01 , 9.55824839260695613e-01 , 9.43925839441110637e-01 , 9.30701991631023517e-01 , 9.16192760575219589e-01 , 9.00441447273609086e-01 , 8.83495059679725081e-01 , 8.65404172372261637e-01 , 8.46222775599758892e-01 , 8.26008114140488470e-01 , 8.04820516454357704e-01 , 7.82723214634618358e-01 , 7.59782155695593819e-01 , 7.36065804758987863e-01 , 7.11644940725781994e-01 , 6.86592445043297195e-01 , 6.60983084197689363e-01 , 6.34893286580919369e-01 , 6.08400914398061987e-01 , 5.81585031295632104e-01 , 5.54525666404393935e-01 , 5.27303575500823407e-01 , 5.00000000000000000e-01 , 4.72696424499176593e-01 , 4.45474333595606120e-01 , 4.18414968704367896e-01 , 3.91599085601937957e-01 , 3.65106713419080631e-01 , 3.39016915802310692e-01 , 3.13407554956702750e-01 , 2.88355059274218006e-01 , 2.63934195241012137e-01 , 2.40217844304406181e-01 , 2.17276785365381614e-01 , 1.95179483545642324e-01 , 1.73991885859511558e-01 , 1.53777224400241136e-01 , 1.34595827627738335e-01 , 1.16504940320274905e-01 , 9.95585527263908726e-02 , 8.38072394247804386e-02 , 6.92980083689765242e-02 , 5.60741605588893355e-02 , 4.41751607393043935e-02 , 3.36365194664491537e-02 , 2.44896867760616282e-02 , 1.67619574140566614e-02 , 1.04763866452656437e-02 , 5.65171117488897506e-03 , 2.30223816078484449e-03 , 4.37217187368574701e-04 }, { 1.12187693612533150e-03 , 2.60826673735938984e-03 , 4.08908003391061665e-03 , 5.55788186616799473e-03 , 7.01013539537677800e-03 , 8.44147951172077513e-03 , 9.84763534974426001e-03 , 1.12244039453882182e-02 , 1.25676754954590613e-02 , 1.38734407010900965e-02 , 1.51378024213469995e-02 , 1.63569871831857824e-02 , 1.75273563911563096e-02 , 1.86454171622086572e-02 , 1.97078327377400581e-02 , 2.07114324354005543e-02 , 2.16532211081075995e-02 , 2.25303880806905776e-02 , 2.33403155368207514e-02 , 2.40805863308438742e-02 , 2.47489912010098387e-02 , 2.53435353624637053e-02 , 2.58624444602589126e-02 , 2.63041698645887154e-02 , 2.66673932924095802e-02 , 2.69510307416492879e-02 , 2.71542357262493199e-02 , 2.72764018023809417e-02 , 2.73171643782920137e-02 , 2.72764018023809417e-02 , 2.71542357262493199e-02 , 2.69510307416492879e-02 , 2.66673932924095802e-02 , 2.63041698645887154e-02 , 2.58624444602589126e-02 , 2.53435353624637053e-02 , 2.47489912010098387e-02 , 2.40805863308438742e-02 , 2.33403155368207514e-02 , 2.25303880806905776e-02 , 2.16532211081075995e-02 , 2.07114324354005543e-02 , 1.97078327377400581e-02 , 1.86454171622086572e-02 , 1.75273563911563096e-02 , 1.63569871831857824e-02 , 1.51378024213469995e-02 , 1.38734407010900965e-02 , 1.25676754954590613e-02 , 1.12244039453882182e-02 , 9.84763534974426001e-03 , 8.44147951172077513e-03 , 7.01013539537677800e-03 , 5.55788186616799473e-03 , 4.08908003391061665e-03 , 2.60826673735938984e-03 , 1.12187693612533150e-03 }, + { 9.99577600203693351e-01 , 9.97775738298645409e-01 , 9.94539504124221319e-01 , 9.89877507347175167e-01 , 9.83803101251462087e-01 , 9.76333778759434501e-01 , 9.67491068794129605e-01 , 9.57300464282176300e-01 , 9.45791346011015110e-01 , 9.32996897037403738e-01 , 9.18954006669686629e-01 , 9.03703163956544042e-01 , 8.87288340874826331e-01 , 8.69756865510021182e-01 , 8.51159285576954083e-01 , 8.31549222666062571e-01 , 8.10983217631539577e-01 , 7.89520567565112463e-01 , 7.67223154824423825e-01 , 7.44155268608359233e-01 , 7.20383419593419783e-01 , 6.95976148165376562e-01 , 6.71003826798997616e-01 , 6.45538457155554579e-01 , 6.19653462483076733e-01 , 5.93423475917880694e-01 , 5.66924125297733394e-01 , 5.40231815107071411e-01 , 5.13423506182971168e-01 , 4.86576493817028832e-01 , 4.59768184892928644e-01 , 4.33075874702266550e-01 , 4.06576524082119306e-01 , 3.80346537516923267e-01 , 3.54461542844445421e-01 , 3.28996173201002384e-01 , 3.04023851834623438e-01 , 2.79616580406580217e-01 , 2.55844731391640767e-01 , 2.32776845175576202e-01 , 2.10479432434887481e-01 , 1.89016782368460451e-01 , 1.68450777333937374e-01 , 1.48840714423045944e-01 , 1.30243134489978873e-01 , 1.12711659125173627e-01 , 9.62968360434559301e-02 , 8.10459933303133429e-02 , 6.70031029625962615e-02 , 5.42086539889849103e-02 , 4.26995357178237278e-02 , 3.25089312058703256e-02 , 2.36662212405654541e-02 , 1.61968987485379551e-02 , 1.01224926528248448e-02 , 5.46049587577868145e-03 , 2.22426170135454860e-03 , 4.22399796306696749e-04 }, { 1.08386162481372505e-03 , 2.51999080632512142e-03 , 3.95098692499933762e-03 , 5.37077676643938663e-03 , 6.77511855649440622e-03 , 8.15993711748548220e-03 , 9.52123273094670347e-03 , 1.08550780700731181e-02 , 1.21576263624819762e-02 , 1.34251215909909349e-02 , 1.46539090220802453e-02 , 1.58404456269046617e-02 , 1.69813102467080042e-02 , 1.80732134335436362e-02 , 1.91130069229292175e-02 , 2.00976927049338998e-02 , 2.10244316647910622e-02 , 2.18905517668201259e-02 , 2.26935557574099028e-02 , 2.34311283645131721e-02 , 2.41011429727088743e-02 , 2.47016677544811963e-02 , 2.52309712399765643e-02 , 2.56875273091428623e-02 , 2.60700195918349108e-02 , 2.63773452631854179e-02 , 2.66086182232895055e-02 , 2.67631716520291274e-02 , 2.68405599316674237e-02 , 2.68405599316674237e-02 , 2.67631716520291274e-02 , 2.66086182232895055e-02 , 2.63773452631854179e-02 , 2.60700195918349108e-02 , 2.56875273091428623e-02 , 2.52309712399765643e-02 , 2.47016677544811963e-02 , 2.41011429727088743e-02 , 2.34311283645131721e-02 , 2.26935557574099028e-02 , 2.18905517668201259e-02 , 2.10244316647910622e-02 , 2.00976927049338998e-02 , 1.91130069229292175e-02 , 1.80732134335436362e-02 , 1.69813102467080042e-02 , 1.58404456269046617e-02 , 1.46539090220802453e-02 , 1.34251215909909349e-02 , 1.21576263624819762e-02 , 1.08550780700731181e-02 , 9.52123273094670347e-03 , 8.15993711748548220e-03 , 6.77511855649440622e-03 , 5.37077676643938663e-03 , 3.95098692499933762e-03 , 2.51999080632512142e-03 , 1.08386162481372505e-03 }, + { 9.99591676954647346e-01 , 9.97849820191622938e-01 , 9.94721182566865481e-01 , 9.90213786978357824e-01 , 9.84340110840890792e-01 , 9.77116504688475551e-01 , 9.68563095176726896e-01 , 9.58703719394077614e-01 , 9.47565855871736029e-01 , 9.35180547146441166e-01 , 9.21582312908436063e-01 , 9.06809053644105800e-01 , 8.90901944931180467e-01 , 8.73905322639320081e-01 , 8.55866559338598898e-01 , 8.36835932252468551e-01 , 8.16866483119425002e-01 , 7.96013870352015096e-01 , 7.74336213904198156e-01 , 7.51893933278859006e-01 , 7.28749579126633296e-01 , 7.04967658905209515e-01 , 6.80614457084897428e-01 , 6.55757850401506803e-01 , 6.30467118671405813e-01 , 6.04812751696018225e-01 , 5.78866252793929004e-01 , 5.52699939508172089e-01 , 5.26386742044155032e-01 , 5.00000000000000000e-01 , 4.73613257955844968e-01 , 4.47300060491827911e-01 , 4.21133747206070996e-01 , 3.95187248303981720e-01 , 3.69532881328594132e-01 , 3.44242149598493141e-01 , 3.19385542915102572e-01 , 2.95032341094790540e-01 , 2.71250420873366649e-01 , 2.48106066721140994e-01 , 2.25663786095801816e-01 , 2.03986129647984932e-01 , 1.83133516880574942e-01 , 1.63164067747531394e-01 , 1.44133440661401130e-01 , 1.26094677360679891e-01 , 1.09098055068819547e-01 , 9.31909463558942136e-02 , 7.84176870915638952e-02 , 6.48194528535588621e-02 , 5.24341441282639570e-02 , 4.12962806059223586e-02 , 3.14369048232730694e-02 , 2.28834953115244731e-02 , 1.56598891591092360e-02 , 9.78621302164215529e-03 , 5.27881743313453420e-03 , 2.15017980837701756e-03 , 4.08323045352658139e-04 }, { 1.04774614227061175e-03 , 2.43611958413264247e-03 , 3.81976472674378734e-03 , 5.19294275049793103e-03 , 6.55168315317259525e-03 , 7.89217365654073383e-03 , 9.21067137680501441e-03 , 1.05034991442185931e-02 , 1.17670526968566818e-02 , 1.29978098656492493e-02 , 1.41923401002673998e-02 , 1.53473139180558410e-02 , 1.64595121355226373e-02 , 1.75258348182000534e-02 , 1.85433099094354618e-02 , 1.95091015080800061e-02 , 2.04205177693433521e-02 , 2.12750184055338180e-02 , 2.20702217651486884e-02 , 2.28039114702548833e-02 , 2.34740425934810079e-02 , 2.40787473573032193e-02 , 2.46163403396809921e-02 , 2.50853231714984505e-02 , 2.54843887126969572e-02 , 2.58124246954457397e-02 , 2.60685168241876972e-02 , 2.62519513239143701e-02 , 2.63622169295639648e-02 , 2.63990063109952114e-02 , 2.63622169295639648e-02 , 2.62519513239143701e-02 , 2.60685168241876972e-02 , 2.58124246954457397e-02 , 2.54843887126969572e-02 , 2.50853231714984505e-02 , 2.46163403396809921e-02 , 2.40787473573032193e-02 , 2.34740425934810079e-02 , 2.28039114702548833e-02 , 2.20702217651486884e-02 , 2.12750184055338180e-02 , 2.04205177693433521e-02 , 1.95091015080800061e-02 , 1.85433099094354618e-02 , 1.75258348182000534e-02 , 1.64595121355226373e-02 , 1.53473139180558410e-02 , 1.41923401002673998e-02 , 1.29978098656492493e-02 , 1.17670526968566818e-02 , 1.05034991442185931e-02 , 9.21067137680501441e-03 , 7.89217365654073383e-03 , 6.55168315317259525e-03 , 5.19294275049793103e-03 , 3.81976472674378734e-03 , 2.43611958413264247e-03 , 1.04774614227061175e-03 }, + { 9.99605061613717982e-01 , 9.97920262559419124e-01 , 9.94893947611110829e-01 , 9.90533600876299047e-01 , 9.84850894382526376e-01 , 9.77861127919998019e-01 , 9.69583138058211613e-01 , 9.60039238088813751e-01 , 9.49255155405022921e-01 , 9.37259961323449131e-01 , 9.24085992392964850e-01 , 9.09768763081072906e-01 , 8.94346869966131996e-01 , 8.77861887653292872e-01 , 8.60358256677865141e-01 , 8.41883163690677727e-01 , 8.22486414244738562e-01 , 8.02220298524255138e-01 , 7.81139450376972300e-01 , 7.59300700029284847e-01 , 7.36762920880853489e-01 , 7.13586870791539152e-01 , 6.89835028288398933e-01 , 6.65571424134224099e-01 , 6.40861468711630855e-01 , 6.15771775688014666e-01 , 5.90369982436712681e-01 , 5.64724567698472457e-01 , 5.38904666974768243e-01 , 5.12979886150623843e-01 , 4.87020113849376102e-01 , 4.61095333025231702e-01 , 4.35275432301527487e-01 , 4.09630017563287319e-01 , 3.84228224311985334e-01 , 3.59138531288369145e-01 , 3.34428575865775901e-01 , 3.10164971711601012e-01 , 2.86413129208460793e-01 , 2.63237079119146455e-01 , 2.40699299970715125e-01 , 2.18860549623027728e-01 , 1.97779701475744807e-01 , 1.77513585755261466e-01 , 1.58116836309322273e-01 , 1.39641743322134804e-01 , 1.22138112346707156e-01 , 1.05653130033867976e-01 , 9.02312369189271213e-02 , 7.59140076070351777e-02 , 6.27400386765508411e-02 , 5.07448445949770302e-02 , 3.99607619111862211e-02 , 3.04168619417883764e-02 , 2.21388720800019465e-02 , 1.51491056174736325e-02 , 9.46639912370090750e-03 , 5.10605238888914119e-03 , 2.07973744058091324e-03 , 3.94938386281988986e-04 }, { 1.01340598443687923e-03 , 2.35636496347678415e-03 , 3.69496558167272792e-03 , 5.02377859114399184e-03 , 6.33908323840797969e-03 , 7.63730929839239944e-03 , 8.91495050710386025e-03 , 1.01685603647286432e-02 , 1.13947584719989101e-02 , 1.25902388107606237e-02 , 1.37517783749623954e-02 , 1.48762457503944720e-02 , 1.59606095096481646e-02 , 1.70019463624732116e-02 , 1.79974490255422510e-02 , 1.89444337846217219e-02 , 1.98403477261904007e-02 , 2.06827756177923767e-02 , 2.14694464179678197e-02 , 2.21982393978935565e-02 , 2.28671898580572429e-02 , 2.34744944244561007e-02 , 2.40185159099855911e-02 , 2.44977877278784173e-02 , 2.49110178452750901e-02 , 2.52570922662546868e-02 , 2.55350780349278134e-02 , 2.57442257504904674e-02 , 2.58839715874550937e-02 , 2.59539388156103182e-02 , 2.59539388156103182e-02 , 2.58839715874550937e-02 , 2.57442257504904674e-02 , 2.55350780349278134e-02 , 2.52570922662546868e-02 , 2.49110178452750901e-02 , 2.44977877278784173e-02 , 2.40185159099855911e-02 , 2.34744944244561007e-02 , 2.28671898580572429e-02 , 2.21982393978935565e-02 , 2.14694464179678197e-02 , 2.06827756177923767e-02 , 1.98403477261904007e-02 , 1.89444337846217219e-02 , 1.79974490255422510e-02 , 1.70019463624732116e-02 , 1.59606095096481646e-02 , 1.48762457503944720e-02 , 1.37517783749623954e-02 , 1.25902388107606237e-02 , 1.13947584719989101e-02 , 1.01685603647286432e-02 , 8.91495050710386025e-03 , 7.63730929839239944e-03 , 6.33908323840797969e-03 , 5.02377859114399184e-03 , 3.69496558167272792e-03 , 2.35636496347678415e-03 , 1.01340598443687923e-03 }, + { 9.99617798815681691e-01 , 9.97987299907560077e-01 , 9.95058372616258513e-01 , 9.90838005642018516e-01 , 9.85337129416591462e-01 , 9.78570075956492036e-01 , 9.70554493340680557e-01 , 9.61311290691477582e-01 , 9.50864581237000572e-01 , 9.39241618607440487e-01 , 9.26472725423831744e-01 , 9.12591214054329969e-01 , 8.97633299641179772e-01 , 8.81638005586156126e-01 , 8.64647061724732602e-01 , 8.46704795447245528e-01 , 8.27858016047535394e-01 , 8.08155892598960812e-01 , 7.87649825675415305e-01 , 7.66393313251462649e-01 , 7.44441811131126063e-01 , 7.21852588269265794e-01 , 6.98684577362878256e-01 , 6.74998221102033447e-01 , 6.50855314481515346e-01 , 6.26318843584526719e-01 , 6.01452821259029213e-01 , 5.76322120115407621e-01 , 5.50992303281137019e-01 , 5.25529453353987153e-01 , 5.00000000000000000e-01 , 4.74470546646012847e-01 , 4.49007696718862981e-01 , 4.23677879884592323e-01 , 3.98547178740970731e-01 , 3.73681156415473226e-01 , 3.49144685518484654e-01 , 3.25001778897966553e-01 , 3.01315422637121688e-01 , 2.78147411730734206e-01 , 2.55558188868873937e-01 , 2.33606686748537351e-01 , 2.12350174324584695e-01 , 1.91844107401039132e-01 , 1.72141983952464550e-01 , 1.53295204552754416e-01 , 1.35352938275267454e-01 , 1.18361994413843902e-01 , 1.02366700358820173e-01 , 8.74087859456700311e-02 , 7.35272745761682833e-02 , 6.07583813925594851e-02 , 4.91354187629994138e-02 , 3.86887093085223691e-02 , 2.94455066593194252e-02 , 2.14299240435079537e-02 , 1.46628705834085452e-02 , 9.16199435798146014e-03 , 4.94162738374147488e-03 , 2.01270009243988265e-03 , 3.82201184318264138e-04 }, { 9.80726680835141426e-04 , 2.28046200300620859e-03 , 3.57617749587454481e-03 , 4.86273091517806701e-03 , 6.13663175390605220e-03 , 7.39453294246895758e-03 , 8.63314649380687166e-03 , 9.84923887305058990e-03 , 1.10396365741595223e-02 , 1.22012335937721015e-02 , 1.33309992620754443e-02 , 1.44259860440917008e-02 , 1.54833371841986978e-02 , 1.65002941379537062e-02 , 1.74742037582666758e-02 , 1.84025252115774078e-02 , 1.92828366035040846e-02 , 2.01128412954991245e-02 , 2.08903738954442468e-02 , 2.16134059062480476e-02 , 2.22800510175417445e-02 , 2.28885700265729804e-02 , 2.34373753754045337e-02 , 2.39250352925478027e-02 , 2.43502775282057639e-02 , 2.47119926733677941e-02 , 2.50092370540891257e-02 , 2.52412351933987006e-02 , 2.54073818344091699e-02 , 2.55072435193486324e-02 , 2.55405597203931106e-02 , 2.55072435193486324e-02 , 2.54073818344091699e-02 , 2.52412351933987006e-02 , 2.50092370540891257e-02 , 2.47119926733677941e-02 , 2.43502775282057639e-02 , 2.39250352925478027e-02 , 2.34373753754045337e-02 , 2.28885700265729804e-02 , 2.22800510175417445e-02 , 2.16134059062480476e-02 , 2.08903738954442468e-02 , 2.01128412954991245e-02 , 1.92828366035040846e-02 , 1.84025252115774078e-02 , 1.74742037582666758e-02 , 1.65002941379537062e-02 , 1.54833371841986978e-02 , 1.44259860440917008e-02 , 1.33309992620754443e-02 , 1.22012335937721015e-02 , 1.10396365741595223e-02 , 9.84923887305058990e-03 , 8.63314649380687166e-03 , 7.39453294246895758e-03 , 6.13663175390605220e-03 , 4.86273091517806701e-03 , 3.57617749587454481e-03 , 2.28046200300620859e-03 , 9.80726680835141426e-04 }, + { 9.99629929654388460e-01 , 9.98051148158133561e-01 , 9.95214985594645163e-01 , 9.91127974548618340e-01 , 9.85800361685825854e-01 , 9.79245586486963582e-01 , 9.71480200696164253e-01 , 9.62523817818101923e-01 , 9.52399061260546742e-01 , 9.41131506415948671e-01 , 9.28749615756035429e-01 , 9.15284666802002378e-01 , 9.00770673051988213e-01 , 8.85244298027709653e-01 , 8.68744762641578405e-01 , 8.51313746111148517e-01 , 8.32995280667739757e-01 , 8.13835640323442577e-01 , 7.93883223976543650e-01 , 7.73188433150125531e-01 , 7.51803544672377977e-01 , 7.29782578620056688e-01 , 7.07181161858563057e-01 , 6.84056387523282239e-01 , 6.60466670797096977e-01 , 6.36471601348363114e-01 , 6.12131792802082741e-01 , 5.87508729624507842e-01 , 5.62664611807948356e-01 , 5.37662197748117188e-01 , 5.12564645710910316e-01 , 4.87435354289089684e-01 , 4.62337802251882812e-01 , 4.37335388192051588e-01 , 4.12491270375492158e-01 , 3.87868207197917259e-01 , 3.63528398651636830e-01 , 3.39533329202903023e-01 , 3.15943612476717761e-01 , 2.92818838141436999e-01 , 2.70217421379943312e-01 , 2.48196455327622023e-01 , 2.26811566849874441e-01 , 2.06116776023456322e-01 , 1.86164359676557423e-01 , 1.67004719332260271e-01 , 1.48686253888851483e-01 , 1.31255237358421623e-01 , 1.14755701972290347e-01 , 9.92293269480118145e-02 , 8.47153331979975666e-02 , 7.12503842439645430e-02 , 5.88684935840513152e-02 , 4.76009387394532649e-02 , 3.74761821818981253e-02 , 2.85197993038357467e-02 , 2.07544135130364529e-02 , 1.41996383141740970e-02 , 8.87202545138167549e-03 , 4.78501440535482412e-03 , 1.94885184186643348e-03 , 3.70070345611485136e-04 }, { 9.49602839756845244e-04 , 2.20816672846545258e-03 , 3.46302095091548029e-03 , 4.70928971421019377e-03 , 5.94369505850525070e-03 , 7.16309591190325903e-03 , 8.36440589508865781e-03 , 9.54458832928659941e-03 , 1.07006611388349836e-02 , 1.18297036043413968e-02 , 1.29288634770123485e-02 , 1.39953640816573195e-02 , 1.50265112869949341e-02 , 1.60197002908123373e-02 , 1.69724221897052732e-02 , 1.78822703113840700e-02 , 1.87469462911400153e-02 , 1.95642658759815416e-02 , 2.03321644412087221e-02 , 2.10487022051925494e-02 , 2.17120691290237089e-02 , 2.23205894885622064e-02 , 2.28727261072850900e-02 , 2.33670842392077610e-02 , 2.38024150920506175e-02 , 2.41776189817388375e-02 , 2.44917481102589173e-02 , 2.47440089598496456e-02 , 2.49337642974761971e-02 , 2.50605347845216445e-02 , 2.51240001876281392e-02 , 2.51240001876281392e-02 , 2.50605347845216445e-02 , 2.49337642974761971e-02 , 2.47440089598496456e-02 , 2.44917481102589173e-02 , 2.41776189817388375e-02 , 2.38024150920506175e-02 , 2.33670842392077610e-02 , 2.28727261072850900e-02 , 2.23205894885622064e-02 , 2.17120691290237089e-02 , 2.10487022051925494e-02 , 2.03321644412087221e-02 , 1.95642658759815416e-02 , 1.87469462911400153e-02 , 1.78822703113840700e-02 , 1.69724221897052732e-02 , 1.60197002908123373e-02 , 1.50265112869949341e-02 , 1.39953640816573195e-02 , 1.29288634770123485e-02 , 1.18297036043413968e-02 , 1.07006611388349836e-02 , 9.54458832928659941e-03 , 8.36440589508865781e-03 , 7.16309591190325903e-03 , 5.94369505850525070e-03 , 4.70928971421019377e-03 , 3.46302095091548029e-03 , 2.20816672846545258e-03 , 9.49602839756845244e-04 }, + { 9.99641492014561872e-01 , 9.98112006388985007e-01 , 9.95364273446094683e-01 , 9.91404405296863578e-01 , 9.86242017348785027e-01 , 9.79889724879470903e-01 , 9.72363067020504901e-01 , 9.63680460310921583e-01 , 9.53863151389265806e-01 , 9.42935164253926761e-01 , 9.30923241182061822e-01 , 9.17856777159751447e-01 , 9.03767747886728312e-01 , 8.88690631495186123e-01 , 8.72662324158923752e-01 , 8.55722049792422945e-01 , 8.37911264057493055e-01 , 8.19273552910682712e-01 , 7.99854525938812566e-01 , 7.79701704743142487e-01 , 7.58864406645016643e-01 , 7.37393623997402159e-01 , 7.15341899397555769e-01 , 6.92763197106123885e-01 , 6.69712770987292205e-01 , 6.46247029293125719e-01 , 6.22423396622976632e-01 , 5.98300173395753365e-01 , 5.73936393178935966e-01 , 5.49391678223472679e-01 , 5.24726093558079754e-01 , 5.00000000000000000e-01 , 4.75273906441920191e-01 , 4.50608321776527376e-01 , 4.26063606821064034e-01 , 4.01699826604246635e-01 , 3.77576603377023312e-01 , 3.53752970706874281e-01 , 3.30287229012707795e-01 , 3.07236802893876060e-01 , 2.84658100602444175e-01 , 2.62606376002597786e-01 , 2.41135593354983385e-01 , 2.20298295256857485e-01 , 2.00145474061187378e-01 , 1.80726447089317316e-01 , 1.62088735942506945e-01 , 1.44277950207577083e-01 , 1.27337675841076303e-01 , 1.11309368504813835e-01 , 9.62322521132716185e-02 , 8.21432228402485809e-02 , 6.90767588179381359e-02 , 5.70648357460732877e-02 , 4.61368486107342213e-02 , 3.63195396890783964e-02 , 2.76369329794950991e-02 , 2.01102751205290350e-02 , 1.37579826512149884e-02 , 8.59559470313638226e-03 , 4.63572655390526688e-03 , 1.88799361101494581e-03 , 3.58507985438109790e-04 }, { 9.19937297788542101e-04 , 2.13925417343188099e-03 , 3.35514588298006788e-03 , 4.56298433816332803e-03 , 5.75968803844002092e-03 , 6.94230630805780548e-03 , 8.10793920516916962e-03 , 9.25373223008063572e-03 , 1.03768806290195446e-02 , 1.14746355024449662e-02 , 1.25443102766724934e-02 , 1.35832871795489672e-02 , 1.45890236041402634e-02 , 1.55590583111099093e-02 , 1.64910174418896709e-02 , 1.73826203226779379e-02 , 1.82316850427286445e-02 , 1.90361337921747774e-02 , 1.97939979457720482e-02 , 2.05034228798331997e-02 , 2.11626725104079108e-02 , 2.17701335415137961e-02 , 2.23243194129706980e-02 , 2.28238739381463052e-02 , 2.32675746226918487e-02 , 2.36543356561344578e-02 , 2.39832105689975657e-02 , 2.42533945489419242e-02 , 2.44642264102559945e-02 , 2.46151902118737810e-02 , 2.47059165199590910e-02 , 2.47361833119655108e-02 , 2.47059165199590910e-02 , 2.46151902118737810e-02 , 2.44642264102559945e-02 , 2.42533945489419242e-02 , 2.39832105689975657e-02 , 2.36543356561344578e-02 , 2.32675746226918487e-02 , 2.28238739381463052e-02 , 2.23243194129706980e-02 , 2.17701335415137961e-02 , 2.11626725104079108e-02 , 2.05034228798331997e-02 , 1.97939979457720482e-02 , 1.90361337921747774e-02 , 1.82316850427286445e-02 , 1.73826203226779379e-02 , 1.64910174418896709e-02 , 1.55590583111099093e-02 , 1.45890236041402634e-02 , 1.35832871795489672e-02 , 1.25443102766724934e-02 , 1.14746355024449662e-02 , 1.03768806290195446e-02 , 9.25373223008063572e-03 , 8.10793920516916962e-03 , 6.94230630805780548e-03 , 5.75968803844002092e-03 , 4.56298433816332803e-03 , 3.35514588298006788e-03 , 2.13925417343188099e-03 , 9.19937297788542101e-04 }, + { 9.99652520867886030e-01 , 9.98170058385977610e-01 , 9.95506685738372199e-01 , 9.91668126942312989e-01 , 9.86663413894955488e-01 , 9.80504399826026884e-01 , 9.73205687429201438e-01 , 9.64784586065969840e-01 , 9.55261068539251412e-01 , 9.44657722997557014e-01 , 9.32999699077046385e-01 , 9.20314648126290158e-01 , 9.06632657561398769e-01 , 8.91986179471670693e-01 , 8.76409953630265970e-01 , 8.59940925085805441e-01 , 8.42618156527116580e-01 , 8.24482735627328656e-01 , 8.05577677586196583e-01 , 7.85947823101317056e-01 , 7.65639732009947283e-01 , 7.44701572853526450e-01 , 7.23183008626732016e-01 , 7.01135078981995785e-01 , 6.78610079168834091e-01 , 6.55661435995105513e-01 , 6.32343581104383712e-01 , 6.08711821870003500e-01 , 5.84822210211996429e-01 , 5.60731409648060231e-01 , 5.36496560893899521e-01 , 5.12175146331712239e-01 , 4.87824853668287761e-01 , 4.63503439106100479e-01 , 4.39268590351939714e-01 , 4.15177789788003571e-01 , 3.91288178129996445e-01 , 3.67656418895616288e-01 , 3.44338564004894543e-01 , 3.21389920831165965e-01 , 2.98864921018004215e-01 , 2.76816991373267929e-01 , 2.55298427146473494e-01 , 2.34360267990052717e-01 , 2.14052176898682972e-01 , 1.94422322413803361e-01 , 1.75517264372671317e-01 , 1.57381843472883365e-01 , 1.40059074914194587e-01 , 1.23590046369734058e-01 , 1.08013820528329293e-01 , 9.33673424386012168e-02 , 7.96853518737098143e-02 , 6.70003009229535873e-02 , 5.53422770024429439e-02 , 4.47389314607485947e-02 , 3.52154139340302152e-02 , 2.67943125707985931e-02 , 1.94956001739731398e-02 , 1.33365861050445175e-02 , 8.33187305768702188e-03 , 4.49331426162783917e-03 , 1.82994161402236038e-03 , 3.47479132113930294e-04 }, { 8.91640360848216509e-04 , 2.07351663028123396e-03 , 3.25222898448918139e-03 , 4.42337991318197347e-03 , 5.58406973006556409e-03 , 6.73152394835932130e-03 , 7.86301523801235906e-03 , 8.97585788784867160e-03 , 1.00674115767651045e-02 , 1.11350869041916267e-02 , 1.21763512843554370e-02 , 1.31887348575273292e-02 , 1.41698363071297417e-02 , 1.51173285362012390e-02 , 1.60289641774257752e-02 , 1.69025809185708031e-02 , 1.77361066284411929e-02 , 1.85275642701200234e-02 , 1.92750765893078130e-02 , 1.99768705663601713e-02 , 2.06312816213117638e-02 , 2.12367575618267954e-02 , 2.17918622646617252e-02 , 2.22952790818782831e-02 , 2.27458139637090710e-02 , 2.31423982906572082e-02 , 2.34840914081050067e-02 , 2.37700828574151542e-02 , 2.39996942982291551e-02 , 2.41723811174014772e-02 , 2.42877337207517141e-02 , 2.43454785045698618e-02 , 2.43454785045698618e-02 , 2.42877337207517141e-02 , 2.41723811174014772e-02 , 2.39996942982291551e-02 , 2.37700828574151542e-02 , 2.34840914081050067e-02 , 2.31423982906572082e-02 , 2.27458139637090710e-02 , 2.22952790818782831e-02 , 2.17918622646617252e-02 , 2.12367575618267954e-02 , 2.06312816213117638e-02 , 1.99768705663601713e-02 , 1.92750765893078130e-02 , 1.85275642701200234e-02 , 1.77361066284411929e-02 , 1.69025809185708031e-02 , 1.60289641774257752e-02 , 1.51173285362012390e-02 , 1.41698363071297417e-02 , 1.31887348575273292e-02 , 1.21763512843554370e-02 , 1.11350869041916267e-02 , 1.00674115767651045e-02 , 8.97585788784867160e-03 , 7.86301523801235906e-03 , 6.73152394835932130e-03 , 5.58406973006556409e-03 , 4.42337991318197347e-03 , 3.25222898448918139e-03 , 2.07351663028123396e-03 , 8.91640360848216509e-04 }, + }; + + + namespace detail { + + // Evaluate the Legendre polynomials up to the given order at x in [-1,1]. + + // p should be an array of order+1 elements. + static void legendre_polynomials(double x, size_t order, double *p) { + assert(initialized); + p[0] = 1.0; + if (order == 0) return; + p[1] = x; + for (size_t n=1; n 3.4e-16) { + std::cout << "GL failed: sum of weights in error by more than 1.5 ulp " << n << std::abs(sum-1.0) << std::endl; + OK = false; + } + } + return OK; + } + + // Used for checking ... integrate the maximum monomial that the rule should do exactly + static bool check_maxn_sum() { + bool OK = true; + const double *x, *w; + for (auto n : range(size_t(1), size_t(65))) { + GLget(n, &x, &w); + double maxn = 2*n - 1; // GL rule with n points can integrate up to x**(2*n-1) + double sum = 0.0; + double exact = 1.0/(maxn+1.0); + for (auto i : range(n)) { + sum += std::pow(x[i],maxn)*w[i]; + } + if (std::abs(sum-exact) > 6.0e-17) { + std::cout << "GL failed: quadrature of x**(2n-1) in error by more than 6e-17 " << n << " " << sum-exact << std::endl; + OK = false; + } + } + return OK; + } + + void GLget(size_t N, const double** x, const double** w) { + assert(N>0 && N<=64); + *x = &data[2*(N-1) ][0]; + *w = &data[2*(N-1)+1][0]; + } + + void GLget(size_t N, const float** x, const float** w) { + assert(N>0 && N<=64); + *x = &fdata[2*(N-1) ][0]; + *w = &fdata[2*(N-1)+1][0]; + } + } +} diff --git a/examples/madness/mra-device/gl.cu b/examples/madness/mra-device/gl.cu new file mode 100644 index 000000000..309b1f88e --- /dev/null +++ b/examples/madness/mra-device/gl.cu @@ -0,0 +1,166 @@ +#include +#include +#include +#include +#include +#include "gl.h" + +namespace mra { + + /* CUDA version of GL: returns a pointer to the relevant entry in the array, located on the device */ + + namespace detail { + // Gauss-Legendre points and weights for n=1...64 inclusive + __constant__ __device__ const double data[128][64] = + { + { 5.00000000000000000e-01 }, { 1.00000000000000000e+00 }, + { 7.88675134594812866e-01 , 2.11324865405187107e-01 }, { 5.00000000000000000e-01 , 5.00000000000000000e-01 }, + { 8.87298334620741702e-01 , 5.00000000000000000e-01 , 1.12701665379258312e-01 }, { 2.77777777777777790e-01 , 4.44444444444444420e-01 , 2.77777777777777790e-01 }, + { 9.30568155797026231e-01 , 6.69990521792428129e-01 , 3.30009478207571871e-01 , 6.94318442029737137e-02 }, { 1.73927422568726925e-01 , 3.26072577431273047e-01 , 3.26072577431273047e-01 , 1.73927422568726925e-01 }, + { 9.53089922969332037e-01 , 7.69234655052841498e-01 , 5.00000000000000000e-01 , 2.30765344947158446e-01 , 4.69100770306680043e-02 }, { 1.18463442528094542e-01 , 2.39314335249683235e-01 , 2.84444444444444444e-01 , 2.39314335249683235e-01 , 1.18463442528094542e-01 }, + { 9.66234757101576025e-01 , 8.30604693233132241e-01 , 6.19309593041598494e-01 , 3.80690406958401562e-01 , 1.69395306766867731e-01 , 3.37652428984239888e-02 }, { 8.56622461895851783e-02 , 1.80380786524069303e-01 , 2.33956967286345519e-01 , 2.33956967286345519e-01 , 1.80380786524069303e-01 , 8.56622461895851783e-02 }, + { 9.74553956171379299e-01 , 8.70765592799697230e-01 , 7.02922575688698537e-01 , 5.00000000000000000e-01 , 2.97077424311301408e-01 , 1.29234407200302770e-01 , 2.54460438286207360e-02 }, { 6.47424830844348514e-02 , 1.39852695744638322e-01 , 1.90915025252559462e-01 , 2.08979591836734702e-01 , 1.90915025252559462e-01 , 1.39852695744638322e-01 , 6.47424830844348514e-02 }, + { 9.80144928248768088e-01 , 8.98333238706813364e-01 , 7.62766204958164495e-01 , 5.91717321247824946e-01 , 4.08282678752175110e-01 , 2.37233795041835505e-01 , 1.01666761293186636e-01 , 1.98550717512318842e-02 }, { 5.06142681451881293e-02 , 1.11190517226687241e-01 , 1.56853322938943635e-01 , 1.81341891689180995e-01 , 1.81341891689180995e-01 , 1.56853322938943635e-01 , 1.11190517226687241e-01 , 5.06142681451881293e-02 }, + { 9.84080119753813043e-01 , 9.18015553663317885e-01 , 8.06685716350295179e-01 , 6.62126711701904513e-01 , 5.00000000000000000e-01 , 3.37873288298095542e-01 , 1.93314283649704793e-01 , 8.19844463366821014e-02 , 1.59198802461869536e-02 }, { 4.06371941807872061e-02 , 9.03240803474286980e-02 , 1.30305348201467719e-01 , 1.56173538520001431e-01 , 1.65119677500629891e-01 , 1.56173538520001431e-01 , 1.30305348201467719e-01 , 9.03240803474286980e-02 , 4.06371941807872061e-02 }, + { 9.86953264258585872e-01 , 9.32531683344492213e-01 , 8.39704784149512218e-01 , 7.16697697064623607e-01 , 5.74437169490815580e-01 , 4.25562830509184420e-01 , 2.83302302935376393e-01 , 1.60295215850487782e-01 , 6.74683166555077457e-02 , 1.30467357414141404e-02 }, { 3.33356721543440690e-02 , 7.47256745752902934e-02 , 1.09543181257991021e-01 , 1.34633359654998175e-01 , 1.47762112357376435e-01 , 1.47762112357376435e-01 , 1.34633359654998175e-01 , 1.09543181257991021e-01 , 7.47256745752902934e-02 , 3.33356721543440690e-02 }, + { 9.89114329073028431e-01 , 9.43531299884047603e-01 , 8.65076002787024678e-01 , 7.59548064603405848e-01 , 6.34771577976172452e-01 , 5.00000000000000000e-01 , 3.65228422023827493e-01 , 2.40451935396594096e-01 , 1.34923997212975350e-01 , 5.64687001159523486e-02 , 1.08856709269715031e-02 }, { 2.78342835580868316e-02 , 6.27901847324523060e-02 , 9.31451054638671172e-02 , 1.16596882295995241e-01 , 1.31402272255123326e-01 , 1.36462543388950308e-01 , 1.31402272255123326e-01 , 1.16596882295995241e-01 , 9.31451054638671172e-02 , 6.27901847324523060e-02 , 2.78342835580868316e-02 }, + { 9.90780317123359566e-01 , 9.52058628185237454e-01 , 8.84951337097152346e-01 , 7.93658977143308686e-01 , 6.83915749499090064e-01 , 5.62616704255734401e-01 , 4.37383295744265543e-01 , 3.16084250500909880e-01 , 2.06341022856691286e-01 , 1.15048662902847654e-01 , 4.79413718147625734e-02 , 9.21968287664037475e-03 }, { 2.35876681932559139e-02 , 5.34696629976592133e-02 , 8.00391642716731105e-02 , 1.01583713361532962e-01 , 1.16746268269177403e-01 , 1.24573522906701387e-01 , 1.24573522906701387e-01 , 1.16746268269177403e-01 , 1.01583713361532962e-01 , 8.00391642716731105e-02 , 5.34696629976592133e-02 , 2.35876681932559139e-02 }, + { 9.92091527359294068e-01 , 9.58799199611488961e-01 , 9.00789045366654939e-01 , 8.21174669720170058e-01 , 7.24246375518223462e-01 , 6.15229157977567387e-01 , 5.00000000000000000e-01 , 3.84770842022432613e-01 , 2.75753624481776594e-01 , 1.78825330279829886e-01 , 9.92109546333450470e-02 , 4.12008003885110177e-02 , 7.90847264070592554e-03 }, { 2.02420023826579386e-02 , 4.60607499188642258e-02 , 6.94367551098936248e-02 , 8.90729903809728690e-02 , 1.03908023768444255e-01 , 1.13141590131448616e-01 , 1.16275776615436949e-01 , 1.13141590131448616e-01 , 1.03908023768444255e-01 , 8.90729903809728690e-02 , 6.94367551098936248e-02 , 4.60607499188642258e-02 , 2.02420023826579386e-02 }, + { 9.93141904348406213e-01 , 9.64217441831786704e-01 , 9.13600657534882510e-01 , 8.43646452405842684e-01 , 7.57624318179077050e-01 , 6.59556184463944928e-01 , 5.54027474353671834e-01 , 4.45972525646328166e-01 , 3.40443815536055128e-01 , 2.42375681820922950e-01 , 1.56353547594157261e-01 , 8.63993424651175040e-02 , 3.57825581682132410e-02 , 6.85809565159383079e-03 }, { 1.75597301658759301e-02 , 4.00790435798801040e-02 , 6.07592853439515926e-02 , 7.86015835790967732e-02 , 9.27691987389689110e-02 , 1.02599231860647802e-01 , 1.07631926731578897e-01 , 1.07631926731578897e-01 , 1.02599231860647802e-01 , 9.27691987389689110e-02 , 7.86015835790967732e-02 , 6.07592853439515926e-02 , 4.00790435798801040e-02 , 1.75597301658759301e-02 }, + { 9.93996259010242689e-01 , 9.68636696200352976e-01 , 9.24103291705213659e-01 , 8.62208865680085035e-01 , 7.85486086304269415e-01 , 6.97075673538781637e-01 , 6.00597046998717299e-01 , 5.00000000000000000e-01 , 3.99402953001282757e-01 , 3.02924326461218307e-01 , 2.14513913695730585e-01 , 1.37791134319914965e-01 , 7.58967082947863969e-02 , 3.13633037996470451e-02 , 6.00374098975728528e-03 }, { 1.53766209980586346e-02 , 3.51830237440540622e-02 , 5.35796102335859697e-02 , 6.97853389630771620e-02 , 8.31346029084969601e-02 , 9.30805000077811057e-02 , 9.92157426635557893e-02 , 1.01289120962780643e-01 , 9.92157426635557893e-02 , 9.30805000077811057e-02 , 8.31346029084969601e-02 , 6.97853389630771620e-02 , 5.35796102335859697e-02 , 3.51830237440540622e-02 , 1.53766209980586346e-02 }, + { 9.94700467495824969e-01 , 9.72287511536616300e-01 , 9.32815601193915822e-01 , 8.77702204177501555e-01 , 8.08938122201321885e-01 , 7.29008388828613629e-01 , 6.40801775389629458e-01 , 5.47506254918818769e-01 , 4.52493745081181287e-01 , 3.59198224610370542e-01 , 2.70991611171386315e-01 , 1.91061877798678115e-01 , 1.22297795822498487e-01 , 6.71843988060841224e-02 , 2.77124884633837103e-02 , 5.29953250417503335e-03 }, { 1.35762297058770465e-02 , 3.11267619693239468e-02 , 4.75792558412463928e-02 , 6.23144856277669384e-02 , 7.47979944082883680e-02 , 8.45782596975012679e-02 , 9.13017075224617919e-02 , 9.47253052275342511e-02 , 9.47253052275342511e-02 , 9.13017075224617919e-02 , 8.45782596975012679e-02 , 7.47979944082883680e-02 , 6.23144856277669384e-02 , 4.75792558412463928e-02 , 3.11267619693239468e-02 , 1.35762297058770465e-02 }, + { 9.95287737657208682e-01 , 9.75337760884383842e-01 , 9.40119576863492901e-01 , 8.90757001948400684e-01 , 8.28835579608345419e-01 , 7.56345268543238469e-01 , 6.75615881726938206e-01 , 5.89242090747923886e-01 , 5.00000000000000000e-01 , 4.10757909252076059e-01 , 3.24384118273061850e-01 , 2.43654731456761503e-01 , 1.71164420391654609e-01 , 1.09242998051599288e-01 , 5.98804231365070508e-02 , 2.46622391156161198e-02 , 4.71226234279133183e-03 }, { 1.20741514342739657e-02 , 2.77297646869936014e-02 , 4.25180741585895888e-02 , 5.59419235967019840e-02 , 6.75681842342627376e-02 , 7.70228805384051418e-02 , 8.40020510782250179e-02 , 8.82813526834963225e-02 , 8.97232351781032667e-02 , 8.82813526834963225e-02 , 8.40020510782250179e-02 , 7.70228805384051418e-02 , 6.75681842342627376e-02 , 5.59419235967019840e-02 , 4.25180741585895888e-02 , 2.77297646869936014e-02 , 1.20741514342739657e-02 }, + { 9.95782584210465505e-01 , 9.77911974785698912e-01 , 9.46301233248777907e-01 , 9.01852479486261571e-01 , 8.45843521530176612e-01 , 7.79885415536973770e-01 , 7.05875580731421315e-01 , 6.25943112845752769e-01 , 5.42387506520867646e-01 , 4.57612493479132354e-01 , 3.74056887154247231e-01 , 2.94124419268578685e-01 , 2.20114584463026230e-01 , 1.54156478469823388e-01 , 9.81475205137384427e-02 , 5.36987667512221281e-02 , 2.20880252143011227e-02 , 4.21741578953452670e-03 }, { 1.08080067632416559e-02 , 2.48572744474848985e-02 , 3.82128651274445258e-02 , 5.04710220531435841e-02 , 6.12776033557392297e-02 , 7.03214573353253269e-02 , 7.73423375631326210e-02 , 8.21382418729163649e-02 , 8.45711914815718002e-02 , 8.45711914815718002e-02 , 8.21382418729163649e-02 , 7.73423375631326210e-02 , 7.03214573353253269e-02 , 6.12776033557392297e-02 , 5.04710220531435841e-02 , 3.82128651274445258e-02 , 2.48572744474848985e-02 , 1.08080067632416559e-02 }, + { 9.96203421921792232e-01 , 9.80104076067415009e-01 , 9.51577951807409006e-01 , 9.11357328268571409e-01 , 8.60483088667614693e-01 , 8.00272652330840550e-01 , 7.32285370687980497e-01 , 6.58282049981814943e-01 , 5.80179322820112642e-01 , 5.00000000000000000e-01 , 4.19820677179887303e-01 , 3.41717950018185057e-01 , 2.67714629312019503e-01 , 1.99727347669159477e-01 , 1.39516911332385307e-01 , 8.86426717314285906e-02 , 4.84220481925910495e-02 , 1.98959239325849843e-02 , 3.79657807820779842e-03 }, { 9.73089411486323906e-03 , 2.24071133828497998e-02 , 3.45222713688206131e-02 , 4.57450108112249995e-02 , 5.57833227736669948e-02 , 6.43769812696681071e-02 , 7.13033510868033016e-02 , 7.63830210329298348e-02 , 7.94844216969771700e-02 , 8.05272249243918492e-02 , 7.94844216969771700e-02 , 7.63830210329298348e-02 , 7.13033510868033016e-02 , 6.43769812696681071e-02 , 5.57833227736669948e-02 , 4.57450108112249995e-02 , 3.45222713688206131e-02 , 2.24071133828497998e-02 , 9.73089411486323906e-03 }, + { 9.96564299592547442e-01 , 9.81985963638956849e-01 , 9.56117214125662973e-01 , 9.19558485911109447e-01 , 8.73165953230075398e-01 , 8.18026840363257568e-01 , 7.55433500975413508e-01 , 6.86853044357709774e-01 , 6.13892925570822534e-01 , 5.38263260566748669e-01 , 4.61736739433251331e-01 , 3.86107074429177466e-01 , 3.13146955642290226e-01 , 2.44566499024586437e-01 , 1.81973159636742488e-01 , 1.26834046769924602e-01 , 8.04415140888905811e-02 , 4.38827858743370477e-02 , 1.80140363610431058e-02 , 3.43570040745253772e-03 }, { 8.80700356957605894e-03 , 2.03007149001934693e-02 , 3.13360241670545339e-02 , 4.16383707883523774e-02 , 5.09650599086202138e-02 , 5.90972659807592060e-02 , 6.58443192245883185e-02 , 7.10480546591910206e-02 , 7.45864932363018707e-02 , 7.63766935653629186e-02 , 7.63766935653629186e-02 , 7.45864932363018707e-02 , 7.10480546591910206e-02 , 6.58443192245883185e-02 , 5.90972659807592060e-02 , 5.09650599086202138e-02 , 4.16383707883523774e-02 , 3.13360241670545339e-02 , 2.03007149001934693e-02 , 8.80700356957605894e-03 }, + { 9.96876085310194782e-01 , 9.83613419283153156e-01 , 9.60049667075200452e-01 , 9.26681682291658593e-01 , 8.84219981737838889e-01 , 8.33569402098706114e-01 , 7.75809417943609914e-01 , 7.12171060103719444e-01 , 6.44010658401200531e-01 , 5.72780927080447588e-01 , 5.00000000000000000e-01 , 4.27219072919552467e-01 , 3.55989341598799469e-01 , 2.87828939896280611e-01 , 2.24190582056390086e-01 , 1.66430597901293831e-01 , 1.15780018262161041e-01 , 7.33183177083413518e-02 , 3.99503329247995823e-02 , 1.63865807168468540e-02 , 3.12391468980525002e-03 }, { 8.00861412888716727e-03 , 1.84768948854262469e-02 , 2.85672127134286025e-02 , 3.80500568141896520e-02 , 4.67222117280169311e-02 , 5.43986495835741893e-02 , 6.09157080268642667e-02 , 6.61344693166687342e-02 , 6.99436973955365748e-02 , 7.22622019949850231e-02 , 7.30405668248452072e-02 , 7.22622019949850231e-02 , 6.99436973955365748e-02 , 6.61344693166687342e-02 , 6.09157080268642667e-02 , 5.43986495835741893e-02 , 4.67222117280169311e-02 , 3.80500568141896520e-02 , 2.85672127134286025e-02 , 1.84768948854262469e-02 , 8.00861412888716727e-03 }, + { 9.97147292741199620e-01 , 9.85030248917714402e-01 , 9.63478386093586936e-01 , 9.32906288860150035e-01 , 8.93908402989604056e-01 , 8.47243631593341373e-01 , 7.93820201753455801e-01 , 7.34677918993378531e-01 , 6.70967910446042093e-01 , 6.03930213344110678e-01 , 5.34869636659861092e-01 , 4.65130363340138908e-01 , 3.96069786655889378e-01 , 3.29032089553957907e-01 , 2.65322081006621469e-01 , 2.06179798246544199e-01 , 1.52756368406658599e-01 , 1.06091597010395916e-01 , 6.70937111398499375e-02 , 3.65216139064130016e-02 , 1.49697510822856365e-02 , 2.85270725880035388e-03 }, { 7.31399764913609994e-03 , 1.68874507924070758e-02 , 2.61466675763416430e-02 , 3.48982342122602443e-02 , 4.29708031085338643e-02 , 5.02070722214404824e-02 , 5.64661480402696078e-02 , 6.16261884052562089e-02 , 6.55867523935311780e-02 , 6.82707491730075861e-02 , 6.96259364278159903e-02 , 6.96259364278159903e-02 , 6.82707491730075861e-02 , 6.55867523935311780e-02 , 6.16261884052562089e-02 , 5.64661480402696078e-02 , 5.02070722214404824e-02 , 4.29708031085338643e-02 , 3.48982342122602443e-02 , 2.61466675763416430e-02 , 1.68874507924070758e-02 , 7.31399764913609994e-03 }, + { 9.97384667498776079e-01 , 9.86271235609057606e-01 , 9.66485543413008075e-01 , 9.38376179135220867e-01 , 9.02444200809419894e-01 , 8.59330681565975141e-01 , 8.09804937881823061e-01 , 7.54750738923003706e-01 , 6.95150519015145463e-01 , 6.32067840485172505e-01 , 5.66628412149233096e-01 , 5.00000000000000000e-01 , 4.33371587850766959e-01 , 3.67932159514827550e-01 , 3.04849480984854593e-01 , 2.45249261076996239e-01 , 1.90195062118176911e-01 , 1.40669318434024915e-01 , 9.75557991905800503e-02 , 6.16238208647791677e-02 , 3.35144565869919461e-02 , 1.37287643909423836e-02 , 2.61533250122393838e-03 }, { 6.70592974357088565e-03 , 1.54940029284897224e-02 , 2.40188358655423345e-02 , 3.21162107042629250e-02 , 3.96407058883594746e-02 , 4.64578830300175771e-02 , 5.24460457322707060e-02 , 5.74983201112056821e-02 , 6.15245421533647668e-02 , 6.44528610940410807e-02 , 6.62310197023483066e-02 , 6.68272860930530926e-02 , 6.62310197023483066e-02 , 6.44528610940410807e-02 , 6.15245421533647668e-02 , 5.74983201112056821e-02 , 5.24460457322707060e-02 , 4.64578830300175771e-02 , 3.96407058883594746e-02 , 3.21162107042629250e-02 , 2.40188358655423345e-02 , 1.54940029284897224e-02 , 6.70592974357088565e-03 }, + { 9.97593609998510655e-01 , 9.87364277985654737e-01 , 9.69137276001366343e-01 , 9.43207763502200480e-01 , 9.10000992986951474e-01 , 8.70062095789277179e-01 , 8.24046825968487773e-01 , 7.72710735694419726e-01 , 7.16896753813022536e-01 , 6.57521339848081698e-01 , 5.95559433736808197e-01 , 5.32028446431302759e-01 , 4.67971553568697185e-01 , 4.04440566263191859e-01 , 3.42478660151918302e-01 , 2.83103246186977409e-01 , 2.27289264305580219e-01 , 1.75953174031512227e-01 , 1.29937904210722821e-01 , 8.99990070130485403e-02 , 5.67922364977994851e-02 , 3.08627239986336219e-02 , 1.26357220143452510e-02 , 2.40639000148931996e-03 }, { 6.17061489999360009e-03 , 1.42656943144668317e-02 , 2.21387194087099039e-02 , 2.96492924577183917e-02 , 3.66732407055401499e-02 , 4.30950807659766372e-02 , 4.88093260520569422e-02 , 5.37221350579828172e-02 , 5.77528340268627996e-02 , 6.08352364639016957e-02 , 6.29187281734141513e-02 , 6.39690976733760797e-02 , 6.39690976733760797e-02 , 6.29187281734141513e-02 , 6.08352364639016957e-02 , 5.77528340268627996e-02 , 5.37221350579828172e-02 , 4.88093260520569422e-02 , 4.30950807659766372e-02 , 3.66732407055401499e-02 , 2.96492924577183917e-02 , 2.21387194087099039e-02 , 1.42656943144668317e-02 , 6.17061489999360009e-03 }, + { 9.97778484895249007e-01 , 9.88331960729758707e-01 , 9.71487285614487162e-01 , 9.47495998939137718e-01 , 9.16721314380417041e-01 , 8.79629631518678790e-01 , 8.36783184236734146e-01 , 7.88831465120611419e-01 , 7.36501365722857515e-01 , 6.80586152904693931e-01 , 6.21933441860494263e-01 , 5.61432346305355212e-01 , 5.00000000000000000e-01 , 4.38567653694644788e-01 , 3.78066558139505793e-01 , 3.19413847095306069e-01 , 2.63498634277142540e-01 , 2.11168534879388525e-01 , 1.63216815763265827e-01 , 1.20370368481321183e-01 , 8.32786856195830011e-02 , 5.25040010608623167e-02 , 2.85127143855128315e-02 , 1.16680392702412442e-02 , 2.22151510475095083e-03 }, { 5.69689925051314414e-03 , 1.31774933075160684e-02 , 2.04695783506531545e-02 , 2.74523479879175969e-02 , 3.40191669061784552e-02 , 4.00703501675005111e-02 , 4.55141309914818271e-02 , 5.02679745335253211e-02 , 5.42598122371318256e-02 , 5.74291295728558207e-02 , 5.97278817678923851e-02 , 6.11212214951550176e-02 , 6.15880268633577227e-02 , 6.11212214951550176e-02 , 5.97278817678923851e-02 , 5.74291295728558207e-02 , 5.42598122371318256e-02 , 5.02679745335253211e-02 , 4.55141309914818271e-02 , 4.00703501675005111e-02 , 3.40191669061784552e-02 , 2.74523479879175969e-02 , 2.04695783506531545e-02 , 1.31774933075160684e-02 , 5.69689925051314414e-03 }, + { 9.97942850572808515e-01 , 9.89192722978235461e-01 , 9.73579533330857116e-01 , 9.51318930992153478e-01 , 9.22722971394248970e-01 , 8.88192974410339398e-01 , 8.48213630209978642e-01 , 8.03346146508808978e-01 , 7.54220357412252795e-01 , 7.01525877561743116e-01 , 6.46002419742978451e-01 , 5.88429410178445078e-01 , 5.29615046714656645e-01 , 4.70384953285343410e-01 , 4.11570589821554922e-01 , 3.53997580257021549e-01 , 2.98474122438256828e-01 , 2.45779642587747149e-01 , 1.96653853491190966e-01 , 1.51786369790021358e-01 , 1.11807025589660575e-01 , 7.72770286057509886e-02 , 4.86810690078464600e-02 , 2.64204666691428766e-02 , 1.08072770217645039e-02 , 2.05714942719153549e-03 }, { 5.27568630867150321e-03 , 1.22089255463159550e-02 , 1.89811916471813828e-02 , 2.54879126485739044e-02 , 3.16370231647874200e-02 , 3.73420748828298746e-02 , 4.25229471567426173e-02 , 4.71069001779570729e-02 , 5.10295805472127106e-02 , 5.42359202642882926e-02 , 5.66809082731598302e-02 , 5.83302217426482916e-02 , 5.91607076396311396e-02 , 5.91607076396311396e-02 , 5.83302217426482916e-02 , 5.66809082731598302e-02 , 5.42359202642882926e-02 , 5.10295805472127106e-02 , 4.71069001779570729e-02 , 4.25229471567426173e-02 , 3.73420748828298746e-02 , 3.16370231647874200e-02 , 2.54879126485739044e-02 , 1.89811916471813828e-02 , 1.22089255463159550e-02 , 5.27568630867150321e-03 }, + { 9.98089631444494252e-01 , 9.89961737980750600e-01 , 9.75450278907352475e-01 , 9.54741160338745565e-01 , 9.28103954009147247e-01 , 8.95885819535254146e-01 , 8.58506736869711795e-01 , 8.16453985973247587e-01 , 7.70275782289728483e-01 , 7.20574125875013460e-01 , 6.67996951819254448e-01 , 6.13229682719768410e-01 , 5.56986292804764971e-01 , 5.00000000000000000e-01 , 4.43013707195235029e-01 , 3.86770317280231590e-01 , 3.32003048180745552e-01 , 2.79425874124986540e-01 , 2.29724217710271544e-01 , 1.83546014026752413e-01 , 1.41493263130288149e-01 , 1.04114180464745881e-01 , 7.18960459908527527e-02 , 4.52588396612544491e-02 , 2.45497210926474974e-02 , 1.00382620192493877e-02 , 1.91036855550571648e-03 }, { 4.89949802564718009e-03 , 1.13431157980903117e-02 , 1.76485268787098561e-02 , 2.37247062603075307e-02 , 2.94917684299167981e-02 , 3.48744118831227981e-02 , 3.98024338865288832e-02 , 4.42115792718784720e-02 , 4.80443636850142533e-02 , 5.12508189088728972e-02 , 5.37891428942665895e-02 , 5.56262441784225944e-02 , 5.67381730544825741e-02 , 5.71104336894784903e-02 , 5.67381730544825741e-02 , 5.56262441784225944e-02 , 5.37891428942665895e-02 , 5.12508189088728972e-02 , 4.80443636850142533e-02 , 4.42115792718784720e-02 , 3.98024338865288832e-02 , 3.48744118831227981e-02 , 2.94917684299167981e-02 , 2.37247062603075307e-02 , 1.76485268787098561e-02 , 1.13431157980903117e-02 , 4.89949802564718009e-03 }, + { 9.98221248786977267e-01 , 9.90651582685436405e-01 , 9.77129640314469139e-01 , 9.57816513196066088e-01 , 9.32946261287197487e-01 , 9.02820685458589622e-01 , 8.67805439006815837e-01 , 8.28325547019432507e-01 , 7.84860235905700865e-01 , 7.37937112477559110e-01 , 6.88125758044539348e-01 , 6.36030813817589080e-01 , 5.82284641066690423e-01 , 5.27539644942017105e-01 , 4.72460355057982839e-01 , 4.17715358933309633e-01 , 3.63969186182410975e-01 , 3.11874241955460652e-01 , 2.62062887522440890e-01 , 2.15139764094299135e-01 , 1.71674452980567521e-01 , 1.32194560993184107e-01 , 9.71793145414104192e-02 , 6.70537387128024714e-02 , 4.21834868039339603e-02 , 2.28703596855309027e-02 , 9.34841731456362290e-03 , 1.77875121302277506e-03 }, { 4.56214129654725856e-03 , 1.05660562963856303e-02 , 1.64507138911521890e-02 , 2.21364673795021137e-02 , 2.75536728378583742e-02 , 3.26364619834998010e-02 , 3.73231071172843917e-02 , 4.15567086144506062e-02 , 4.52858721965164190e-02 , 4.84653289989649544e-02 , 5.10564837890303824e-02 , 5.30278829614232103e-02 , 5.43555961291470671e-02 , 5.50235065082375976e-02 , 5.50235065082375976e-02 , 5.43555961291470671e-02 , 5.30278829614232103e-02 , 5.10564837890303824e-02 , 4.84653289989649544e-02 , 4.52858721965164190e-02 , 4.15567086144506062e-02 , 3.73231071172843917e-02 , 3.26364619834998010e-02 , 2.75536728378583742e-02 , 2.21364673795021137e-02 , 1.64507138911521890e-02 , 1.05660562963856303e-02 , 4.56214129654725856e-03 }, + { 9.98339721130298230e-01 , 9.91272752630706577e-01 , 9.78642797889043847e-01 , 9.60590116476529365e-01 , 9.37318902460051340e-01 , 9.09092743807626169e-01 , 8.76231425867238567e-01 , 8.39107268801343231e-01 , 7.98140898569113855e-01 , 7.53796477562113765e-01 , 7.06576444087004374e-01 , 6.57015818933819995e-01 , 6.05676143083000551e-01 , 5.53139115066339615e-01 , 5.00000000000000000e-01 , 4.46860884933660385e-01 , 3.94323856916999449e-01 , 3.42984181066180005e-01 , 2.93423555912995682e-01 , 2.46203522437886180e-01 , 2.01859101430886090e-01 , 1.60892731198656741e-01 , 1.23768574132761433e-01 , 9.09072561923737754e-02 , 6.26810975399486048e-02 , 3.94098835234706069e-02 , 2.13572021109561354e-02 , 8.72724736929341230e-03 , 1.66027886970170698e-03 }, { 4.25845193937320499e-03 , 9.86604252806135354e-03 , 1.53702461010468104e-02 , 2.07010312593414181e-02 , 2.57974134512489600e-02 , 3.06015453285395679e-02 , 3.50589666275256395e-02 , 3.91191635678818928e-02 , 4.27361286830862663e-02 , 4.58688785696293802e-02 , 4.84819170472043023e-02 , 5.05456368799574798e-02 , 5.20366550388646903e-02 , 5.29380775486604713e-02 , 5.32396908591571197e-02 , 5.29380775486604713e-02 , 5.20366550388646903e-02 , 5.05456368799574798e-02 , 4.84819170472043023e-02 , 4.58688785696293802e-02 , 4.27361286830862663e-02 , 3.91191635678818928e-02 , 3.50589666275256395e-02 , 3.06015453285395679e-02 , 2.57974134512489600e-02 , 2.07010312593414181e-02 , 1.53702461010468104e-02 , 9.86604252806135354e-03 , 4.25845193937320499e-03 }, + { 9.98446742037324753e-01 , 9.91834061639873643e-01 , 9.80010932484153718e-01 , 9.63100023714637210e-01 , 9.41280267896026368e-01 , 9.14782881191384178e-01 , 8.83888716052413148e-01 , 8.48925247396657867e-01 , 8.10263091494621390e-01 , 7.68312074071009987e-01 , 7.23516884769044522e-01 , 6.76352362765439086e-01 , 6.27318463083944899e-01 , 5.76934956804291743e-01 , 5.25735921277658891e-01 , 4.74264078722341165e-01 , 4.23065043195708201e-01 , 3.72681536916055101e-01 , 3.23647637234560914e-01 , 2.76483115230955423e-01 , 2.31687925928990041e-01 , 1.89736908505378554e-01 , 1.51074752603342105e-01 , 1.16111283947586907e-01 , 8.52171188086157938e-02 , 5.87197321039736597e-02 , 3.68999762853628385e-02 , 1.99890675158462434e-02 , 8.16593836012639504e-03 , 1.55325796267522984e-03 }, { 3.98409624808330250e-03 , 9.23323415554547916e-03 , 1.43923539416616845e-02 , 1.93995962848135250e-02 , 2.42013364152970263e-02 , 2.87465781088095326e-02 , 3.29871149410902453e-02 , 3.68779873688526022e-02 , 4.03779476147101066e-02 , 4.34498936005414879e-02 , 4.60612611188930612e-02 , 4.81843685873221267e-02 , 4.97967102933976336e-02 , 5.08811948742027495e-02 , 5.14263264467794204e-02 , 5.14263264467794204e-02 , 5.08811948742027495e-02 , 4.97967102933976336e-02 , 4.81843685873221267e-02 , 4.60612611188930612e-02 , 4.34498936005414879e-02 , 4.03779476147101066e-02 , 3.68779873688526022e-02 , 3.29871149410902453e-02 , 2.87465781088095326e-02 , 2.42013364152970263e-02 , 1.93995962848135250e-02 , 1.43923539416616845e-02 , 9.23323415554547916e-03 , 3.98409624808330250e-03 }, + { 9.98543740909738520e-01 , 9.92342954832576174e-01 , 9.81251962546474843e-01 , 9.65378498948324060e-01 , 9.44880014974135540e-01 , 9.19960160073133637e-01 , 8.90866574208312501e-01 , 8.57888392293426616e-01 , 8.21353361462130227e-01 , 7.81624580703574656e-01 , 7.39096891022451241e-01 , 6.94192950804116471e-01 , 6.47359034990850790e-01 , 5.99060599667785354e-01 , 5.49777656076170795e-01 , 5.00000000000000000e-01 , 4.50222343923829260e-01 , 4.00939400332214702e-01 , 3.52640965009149210e-01 , 3.05807049195883529e-01 , 2.60903108977548759e-01 , 2.18375419296425372e-01 , 1.78646638537869829e-01 , 1.42111607706573356e-01 , 1.09133425791687527e-01 , 8.00398399268663352e-02 , 5.51199850258644805e-02 , 3.46215010516759195e-02 , 1.87480374535251675e-02 , 7.65704516742375836e-03 , 1.45625909026146291e-03 }, { 3.73541578962438775e-03 , 8.65931039515529036e-03 , 1.35045095924897114e-02 , 1.82161369561927335e-02 , 2.27468537636005518e-02 , 2.70515412124584277e-02 , 3.10873932805142139e-02 , 3.48142916177051828e-02 , 3.81951932993883081e-02 , 4.11964958807946313e-02 , 4.37883703042389397e-02 , 4.59450569468207379e-02 , 4.76451214561597544e-02 , 4.88716676931643598e-02 , 4.96125056133361539e-02 , 4.98602723967132289e-02 , 4.96125056133361539e-02 , 4.88716676931643598e-02 , 4.76451214561597544e-02 , 4.59450569468207379e-02 , 4.37883703042389397e-02 , 4.11964958807946313e-02 , 3.81951932993883081e-02 , 3.48142916177051828e-02 , 3.10873932805142139e-02 , 2.70515412124584277e-02 , 2.27468537636005518e-02 , 1.82161369561927335e-02 , 1.35045095924897114e-02 , 8.65931039515529036e-03 , 3.73541578962438775e-03 }, + { 9.98631930924740785e-01 , 9.92805755772634191e-01 , 9.82381127793753195e-01 , 9.67453037968869833e-01 , 9.48160577883026101e-01 , 9.24683806866284930e-01 , 8.97241897983971137e-01 , 8.66091059370144856e-01 , 8.31522133465107616e-01 , 7.93857878620381152e-01 , 7.53449954466114735e-01 , 7.10675638065317639e-01 , 6.65934301141063778e-01 , 6.19643681126068491e-01 , 5.72235980791398258e-01 , 5.24153832843869183e-01 , 4.75846167156130817e-01 , 4.27764019208601742e-01 , 3.80356318873931454e-01 , 3.34065698858936166e-01 , 2.89324361934682306e-01 , 2.46550045533885293e-01 , 2.06142121379618848e-01 , 1.68477866534892384e-01 , 1.33908940629855144e-01 , 1.02758102016028793e-01 , 7.53161931337150148e-02 , 5.18394221169739405e-02 , 3.25469620311301527e-02 , 1.76188722062467842e-02 , 7.19424422736583257e-03 , 1.36806907525921810e-03 }, { 3.50930500473504818e-03 , 8.13719736545283519e-03 , 1.26960326546310294e-02 , 1.71369314565107157e-02 , 2.14179490111133415e-02 , 2.54990296311880874e-02 , 2.93420467392677721e-02 , 3.29111113881809247e-02 , 3.61728970544242523e-02 , 3.90969478935351555e-02 , 4.16559621134733743e-02 , 4.38260465022019055e-02 , 4.55869393478819385e-02 , 4.69221995404022832e-02 , 4.78193600396374305e-02 , 4.82700442573638991e-02 , 4.82700442573638991e-02 , 4.78193600396374305e-02 , 4.69221995404022832e-02 , 4.55869393478819385e-02 , 4.38260465022019055e-02 , 4.16559621134733743e-02 , 3.90969478935351555e-02 , 3.61728970544242523e-02 , 3.29111113881809247e-02 , 2.93420467392677721e-02 , 2.54990296311880874e-02 , 2.14179490111133415e-02 , 1.71369314565107157e-02 , 1.26960326546310294e-02 , 8.13719736545283519e-03 , 3.50930500473504818e-03 }, + { 9.98712347123227540e-01 , 9.93227863115321297e-01 , 9.83411454844996369e-01 , 9.69347186305584141e-01 , 9.51158383871716806e-01 , 9.29004826338251988e-01 , 9.03081178137083329e-01 , 8.73615248224781094e-01 , 8.40865979984871448e-01 , 8.05121172918189520e-01 , 7.66694952393173867e-01 , 7.25925008636225333e-01 , 6.83169628874036650e-01 , 6.38804548576248465e-01 , 5.93219649413995742e-01 , 5.46815532927366732e-01 , 5.00000000000000000e-01 , 4.53184467072633324e-01 , 4.06780350586004202e-01 , 3.61195451423751479e-01 , 3.16830371125963350e-01 , 2.74074991363774667e-01 , 2.33305047606826188e-01 , 1.94878827081810480e-01 , 1.59134020015128608e-01 , 1.26384751775218906e-01 , 9.69188218629166987e-02 , 7.09951736617479706e-02 , 4.88416161282832079e-02 , 3.06528136944158244e-02 , 1.65885451550036173e-02 , 6.77213688467875625e-03 , 1.28765287677239126e-03 }, { 3.30311392379368900e-03 , 7.66085075646733785e-03 , 1.19577740508747393e-02 , 1.61501793161644772e-02 , 2.02007706658347969e-02 , 2.40738714093558480e-02 , 2.77354233158317795e-02 , 3.11532412651587404e-02 , 3.42972864093283591e-02 , 3.71399274219770745e-02 , 3.96561823974433680e-02 , 4.18239380335193520e-02 , 4.36241438094221654e-02 , 4.50409793303192876e-02 , 4.60619933216584246e-02 , 4.66782130327980591e-02 , 4.68842230801049947e-02 , 4.66782130327980591e-02 , 4.60619933216584246e-02 , 4.50409793303192876e-02 , 4.36241438094221654e-02 , 4.18239380335193520e-02 , 3.96561823974433680e-02 , 3.71399274219770745e-02 , 3.42972864093283591e-02 , 3.11532412651587404e-02 , 2.77354233158317795e-02 , 2.40738714093558480e-02 , 2.02007706658347969e-02 , 1.61501793161644772e-02 , 1.19577740508747393e-02 , 7.66085075646733785e-03 , 3.30311392379368900e-03 }, + { 9.98785876895420976e-01 , 9.93613908203154761e-01 , 9.84354131266672150e-01 , 9.71081198702553494e-01 , 9.53904838859162219e-01 , 9.32967319167282261e-01 , 9.08442113950466812e-01 , 8.80532438314936439e-01 , 8.49469556608131393e-01 , 8.15510863540264253e-01 , 7.78937750334873336e-01 , 7.40053272595163514e-01 , 6.99179638879322995e-01 , 6.56655540669731641e-01 , 6.12833345808224683e-01 , 5.68076178629591477e-01 , 5.22754910976551246e-01 , 4.77245089023448754e-01 , 4.31923821370408523e-01 , 3.87166654191775261e-01 , 3.43344459330268359e-01 , 3.00820361120677005e-01 , 2.59946727404836486e-01 , 2.21062249665126664e-01 , 1.84489136459735720e-01 , 1.50530443391868551e-01 , 1.19467561685063492e-01 , 9.15578860495331603e-02 , 6.70326808327177670e-02 , 4.60951611408377676e-02 , 2.89188012974464538e-02 , 1.56458687333278605e-02 , 6.38609179684525730e-03 , 1.21412310457904042e-03 }, { 3.11457027795434237e-03 , 7.22508137429751784e-03 , 1.12818609927474844e-02 , 1.52456903192230656e-02 , 1.90832968981937585e-02 , 2.27628057616766355e-02 , 2.62537072863390543e-02 , 2.95270679137622470e-02 , 3.25557607770382076e-02 , 3.53146879071278633e-02 , 3.77809873300159679e-02 , 3.99342221698859232e-02 , 4.17565498499228305e-02 , 4.32328698735178762e-02 , 4.43509489178469316e-02 , 4.51015221853203613e-02 , 4.54783701651299346e-02 , 4.54783701651299346e-02 , 4.51015221853203613e-02 , 4.43509489178469316e-02 , 4.32328698735178762e-02 , 4.17565498499228305e-02 , 3.99342221698859232e-02 , 3.77809873300159679e-02 , 3.53146879071278633e-02 , 3.25557607770382076e-02 , 2.95270679137622470e-02 , 2.62537072863390543e-02 , 2.27628057616766355e-02 , 1.90832968981937585e-02 , 1.52456903192230656e-02 , 1.12818609927474844e-02 , 7.22508137429751784e-03 , 3.11457027795434237e-03 }, + { 9.98853284549800158e-01 , 9.93967882221925780e-01 , 9.85218808019614922e-01 , 9.72672574103913612e-01 , 9.56427130679658788e-01 , 9.36609562512611182e-01 , 9.13374949546112758e-01 , 8.86905126143456290e-01 , 8.57407250778314367e-01 , 8.25112182332945143e-01 , 7.90272672374882301e-01 , 7.53161386620744278e-01 , 7.14068770758907068e-01 , 6.73300777215406931e-01 , 6.31176470604647988e-01 , 5.88025530582994782e-01 , 5.44185671637829604e-01 , 5.00000000000000000e-01 , 4.55814328362170396e-01 , 4.11974469417005218e-01 , 3.68823529395351957e-01 , 3.26699222784593013e-01 , 2.85931229241092877e-01 , 2.46838613379255695e-01 , 2.09727327625117754e-01 , 1.74887817667054801e-01 , 1.42592749221685605e-01 , 1.13094873856543723e-01 , 8.66250504538872979e-02 , 6.33904374873888316e-02 , 4.35728693203411913e-02 , 2.73274258960863360e-02 , 1.47811919803850830e-02 , 6.03211777807425090e-03 , 1.14671545019985133e-03 }, { 2.94171671022154264e-03 , 6.82541417418074635e-03 , 1.06614899557417910e-02 , 1.44146300544471268e-02 , 1.80550579317316912e-02 , 2.15542111630851081e-02 , 2.48846852006767635e-02 , 2.80204081061850643e-02 , 3.09368359830400931e-02 , 3.36111426345434491e-02 , 3.60223973862800334e-02 , 3.81517285777210266e-02 , 3.99824711211621345e-02 , 4.15002968644282919e-02 , 4.26933266960495619e-02 , 4.35522234985917661e-02 , 4.40702652151377314e-02 , 4.42433974535521440e-02 , 4.40702652151377314e-02 , 4.35522234985917661e-02 , 4.26933266960495619e-02 , 4.15002968644282919e-02 , 3.99824711211621345e-02 , 3.81517285777210266e-02 , 3.60223973862800334e-02 , 3.36111426345434491e-02 , 3.09368359830400931e-02 , 2.80204081061850643e-02 , 2.48846852006767635e-02 , 2.15542111630851081e-02 , 1.80550579317316912e-02 , 1.44146300544471268e-02 , 1.06614899557417910e-02 , 6.82541417418074635e-03 , 2.94171671022154264e-03 }, + { 9.98915231242042956e-01 , 9.94293239451106148e-01 , 9.86013845524848942e-01 , 9.74136492199753734e-01 , 9.58748887257829585e-01 , 9.39964900445198537e-01 , 9.17923583496237594e-01 , 8.92788115066103227e-01 , 8.64744585796778265e-01 , 8.34000618292760509e-01 , 8.00783829067990283e-01 , 7.65340142963122583e-01 , 7.27931972216710133e-01 , 6.88836273559844559e-01 , 6.48342497672014129e-01 , 6.06750446158432766e-01 , 5.64368051904692414e-01 , 5.21509099236854290e-01 , 4.78490900763145710e-01 , 4.35631948095307586e-01 , 3.93249553841567234e-01 , 3.51657502327985871e-01 , 3.11163726440155386e-01 , 2.72068027783289867e-01 , 2.34659857036877417e-01 , 1.99216170932009717e-01 , 1.65999381707239463e-01 , 1.35255414203221708e-01 , 1.07211884933896745e-01 , 8.20764165037623505e-02 , 6.00350995548014355e-02 , 4.12511127421704704e-02 , 2.58635078002462278e-02 , 1.39861544751510251e-02 , 5.70676054889388083e-03 , 1.08476875795708192e-03 }, { 2.78285983212252274e-03 , 6.45797364203278684e-03 , 1.00907576488677361e-02 , 1.36493107492843893e-02 , 1.71069053851536160e-02 , 2.04378754618224460e-02 , 2.36175417451329889e-02 , 2.66223569888799604e-02 , 2.94300721226624096e-02 , 3.20198986775077424e-02 , 3.43726619178682247e-02 , 3.64709425028265297e-02 , 3.82992053229353341e-02 , 3.98439144560358005e-02 , 4.10936333521698532e-02 , 4.20391094898309656e-02 , 4.26733428696693118e-02 , 4.29916378351973757e-02 , 4.29916378351973757e-02 , 4.26733428696693118e-02 , 4.20391094898309656e-02 , 4.10936333521698532e-02 , 3.98439144560358005e-02 , 3.82992053229353341e-02 , 3.64709425028265297e-02 , 3.43726619178682247e-02 , 3.20198986775077424e-02 , 2.94300721226624096e-02 , 2.66223569888799604e-02 , 2.36175417451329889e-02 , 2.04378754618224460e-02 , 1.71069053851536160e-02 , 1.36493107492843893e-02 , 1.00907576488677361e-02 , 6.45797364203278684e-03 , 2.78285983212252274e-03 }, + { 9.98972291238956811e-01 , 9.94592981607159587e-01 , 9.86746515028242843e-01 , 9.75486171631047450e-01 , 9.60890718706231883e-01 , 9.43062481077743042e-01 , 9.22126493670277991e-01 , 8.98229600254951133e-01 , 8.71539416990982585e-01 , 8.42243154565479712e-01 , 8.10546304204462276e-01 , 7.76671195930790925e-01 , 7.40855438901602770e-01 , 7.03350254659163010e-01 , 6.64418714941853450e-01 , 6.24333896395682819e-01 , 5.83376965119925983e-01 , 5.41835204477384980e-01 , 5.00000000000000000e-01 , 4.58164795522615020e-01 , 4.16623034880074017e-01 , 3.75666103604317125e-01 , 3.35581285058146495e-01 , 2.96649745340836934e-01 , 2.59144561098397230e-01 , 2.23328804069209103e-01 , 1.89453695795537752e-01 , 1.57756845434520315e-01 , 1.28460583009017359e-01 , 1.01770399745048853e-01 , 7.78735063297220087e-02 , 5.69375189222569578e-02 , 3.91092812937681306e-02 , 2.45138283689525886e-02 , 1.32534849717571273e-02 , 5.40701839284040645e-03 , 1.02770876104317553e-03 }, { 2.63652863974896947e-03 , 6.11939005015377843e-03 , 9.56452224454198280e-03 , 1.29430184952794673e-02 , 1.62308199237607420e-02 , 1.94048012509672706e-02 , 2.24426823312185823e-02 , 2.53231488274123021e-02 , 2.80259939991374593e-02 , 3.05322582616129948e-02 , 3.28243614363756264e-02 , 3.48862257778501730e-02 , 3.67033886242440835e-02 , 3.82631037852646169e-02 , 3.95544309187646909e-02 , 4.05683122542325122e-02 , 4.12976361182186280e-02 , 4.17372868129313943e-02 , 4.18841804965694522e-02 , 4.17372868129313943e-02 , 4.12976361182186280e-02 , 4.05683122542325122e-02 , 3.95544309187646909e-02 , 3.82631037852646169e-02 , 3.67033886242440835e-02 , 3.48862257778501730e-02 , 3.28243614363756264e-02 , 3.05322582616129948e-02 , 2.80259939991374593e-02 , 2.53231488274123021e-02 , 2.24426823312185823e-02 , 1.94048012509672706e-02 , 1.62308199237607420e-02 , 1.29430184952794673e-02 , 9.56452224454198280e-03 , 6.11939005015377843e-03 , 2.63652863974896947e-03 }, + { 9.99024965267843790e-01 , 9.94869727133192772e-01 , 9.87423164295076705e-01 , 9.76733165466764808e-01 , 9.62870666024292166e-01 , 9.45927869502316110e-01 , 9.26017510966181123e-01 , 9.03272083802658443e-01 , 8.77842951876985356e-01 , 8.49899340189592123e-01 , 8.19627207914840894e-01 , 7.87228010523903565e-01 , 7.52917358963965500e-01 , 7.16923584716188222e-01 , 6.79486220239717498e-01 , 6.40854404895082608e-01 , 6.01285226946058349e-01 , 5.61042012668933721e-01 , 5.20392573952289106e-01 , 4.79607426047710894e-01 , 4.38957987331066279e-01 , 3.98714773053941651e-01 , 3.59145595104917392e-01 , 3.20513779760282502e-01 , 2.83076415283811778e-01 , 2.47082641036034445e-01 , 2.12771989476096463e-01 , 1.80372792085159134e-01 , 1.50100659810407822e-01 , 1.22157048123014658e-01 , 9.67279161973415846e-02 , 7.39824890338189045e-02 , 5.40721304976838901e-02 , 3.71293339757077998e-02 , 2.32668345332352026e-02 , 1.25768357049232463e-02 , 5.13027286680721364e-03 , 9.75034732156190116e-04 }, { 2.50144037481967287e-03 , 5.80672235823433656e-03 , 9.07828885480661818e-03 , 1.22898698691161871e-02 , 1.54197502725875266e-02 , 1.84470407970123706e-02 , 2.13515792523372161e-02 , 2.41140309303793411e-02 , 2.67160099551661603e-02 , 2.91401995734986013e-02 , 3.13704666960665235e-02 , 3.33919689895702046e-02 , 3.51912535334494778e-02 , 3.67563462923717263e-02 , 3.80768317742231979e-02 , 3.91439223291054766e-02 , 3.99505166217639096e-02 , 4.04912468852985513e-02 , 4.07625146401928914e-02 , 4.07625146401928914e-02 , 4.04912468852985513e-02 , 3.99505166217639096e-02 , 3.91439223291054766e-02 , 3.80768317742231979e-02 , 3.67563462923717263e-02 , 3.51912535334494778e-02 , 3.33919689895702046e-02 , 3.13704666960665235e-02 , 2.91401995734986013e-02 , 2.67160099551661603e-02 , 2.41140309303793411e-02 , 2.13515792523372161e-02 , 1.84470407970123706e-02 , 1.54197502725875266e-02 , 1.22898698691161871e-02 , 9.07828885480661818e-03 , 5.80672235823433656e-03 , 2.50144037481967287e-03 }, + { 9.99073691533216457e-01 , 9.95125768427343016e-01 , 9.88049354666735491e-01 , 9.77887606162326173e-01 , 9.64704574243369084e-01 , 9.48583559646496433e-01 , 9.29626468999953048e-01 , 9.07953148715071601e-01 , 8.83700621465531744e-01 , 8.57022217947267295e-01 , 8.28086606716005424e-01 , 7.97076727478639002e-01 , 7.64188634330218775e-01 , 7.29630256154568002e-01 , 6.93620081985780734e-01 , 6.56385779624092947e-01 , 6.18162756230917876e-01 , 5.79192669998918941e-01 , 5.39721902304377776e-01 , 5.00000000000000000e-01 , 4.60278097695622279e-01 , 4.20807330001081115e-01 , 3.81837243769082124e-01 , 3.43614220375907053e-01 , 3.06379918014219266e-01 , 2.70369743845431998e-01 , 2.35811365669781253e-01 , 2.02923272521360998e-01 , 1.71913393283994548e-01 , 1.42977782052732649e-01 , 1.16299378534468256e-01 , 9.20468512849284409e-02 , 7.03735310000469239e-02 , 5.14164403535035536e-02 , 3.52954257566308882e-02 , 2.21123938376738619e-02 , 1.19506453332644726e-02 , 4.87423157265700832e-03 , 9.26308466783546964e-04 }, { 2.37647234581755051e-03 , 5.51739446958229678e-03 , 8.62811454686245906e-03 , 1.16846924160890816e-02 , 1.46674779919516891e-02 , 1.75575557490656661e-02 , 2.03366384239669212e-02 , 2.29871505544583174e-02 , 2.54923326460647012e-02 , 2.78363451704581495e-02 , 3.00043680442980756e-02 , 3.19826940693411915e-02 , 3.37588154831156353e-02 , 3.53215029853043774e-02 , 3.66608767071343114e-02 , 3.77684686614180309e-02 , 3.86372762723410090e-02 , 3.92618066436855873e-02 , 3.96381112841842354e-02 , 3.97638110697214262e-02 , 3.96381112841842354e-02 , 3.92618066436855873e-02 , 3.86372762723410090e-02 , 3.77684686614180309e-02 , 3.66608767071343114e-02 , 3.53215029853043774e-02 , 3.37588154831156353e-02 , 3.19826940693411915e-02 , 3.00043680442980756e-02 , 2.78363451704581495e-02 , 2.54923326460647012e-02 , 2.29871505544583174e-02 , 2.03366384239669212e-02 , 1.75575557490656661e-02 , 1.46674779919516891e-02 , 1.16846924160890816e-02 , 8.62811454686245906e-03 , 5.51739446958229678e-03 , 2.37647234581755051e-03 }, + { 9.99118854855279626e-01 , 9.95363119349728542e-01 , 9.88629974991887095e-01 , 9.78958409606895841e-01 , 9.66406404139338315e-01 , 9.51049403484437117e-01 , 9.32979751606129781e-01 , 9.12306115416655850e-01 , 8.89152825713259709e-01 , 8.63659127594963549e-01 , 8.35978342307089783e-01 , 8.06276944833990150e-01 , 7.74733562547564092e-01 , 7.41537900843089348e-01 , 7.06889602185802435e-01 , 6.70997045412879189e-01 , 6.34076092503626843e-01 , 5.96348790350685554e-01 , 5.58042035337627640e-01 , 5.19386208753025436e-01 , 4.80613791246974564e-01 , 4.41957964662372416e-01 , 4.03651209649314446e-01 , 3.65923907496373157e-01 , 3.29002954587120755e-01 , 2.93110397814197510e-01 , 2.58462099156910652e-01 , 2.25266437452435908e-01 , 1.93723055166009878e-01 , 1.64021657692910217e-01 , 1.36340872405036451e-01 , 1.10847174286740305e-01 , 8.76938845833441644e-02 , 6.70202483938702465e-02 , 4.89505965155628484e-02 , 3.35935958606617333e-02 , 2.10415903931041731e-02 , 1.13700250081128686e-02 , 4.63688065027149671e-03 , 8.81145144720399788e-04 }, { 2.26063854926659546e-03 , 5.24914226557640640e-03 , 8.21052919095394476e-03 , 1.11229245970834792e-02 , 1.39685034900116998e-02 , 1.67300976412739222e-02 , 1.93910839872360082e-02 , 2.19354540928366343e-02 , 2.43479038175361158e-02 , 2.66139234919684116e-02 , 2.87198845496957761e-02 , 3.06531212464644688e-02 , 3.24020067283005211e-02 , 3.39560229076169492e-02 , 3.53058236956433902e-02 , 3.64432911979020308e-02 , 3.73615845289841306e-02 , 3.80551809503131208e-02 , 3.85199090821239792e-02 , 3.87529739892124026e-02 , 3.87529739892124026e-02 , 3.85199090821239792e-02 , 3.80551809503131208e-02 , 3.73615845289841306e-02 , 3.64432911979020308e-02 , 3.53058236956433902e-02 , 3.39560229076169492e-02 , 3.24020067283005211e-02 , 3.06531212464644688e-02 , 2.87198845496957761e-02 , 2.66139234919684116e-02 , 2.43479038175361158e-02 , 2.19354540928366343e-02 , 1.93910839872360082e-02 , 1.67300976412739222e-02 , 1.39685034900116998e-02 , 1.11229245970834792e-02 , 8.21052919095394476e-03 , 5.24914226557640640e-03 , 2.26063854926659546e-03 }, + { 9.99160794287385690e-01 , 9.95583554849508112e-01 , 9.89169336780541641e-01 , 9.79953445865173078e-01 , 9.67988493748926926e-01 , 9.53342972379050524e-01 , 9.36100755846220656e-01 , 9.16360600200680664e-01 , 8.94235572523704669e-01 , 8.69852401534963127e-01 , 8.43350751017475586e-01 , 8.14882419536098190e-01 , 7.84610470805107929e-01 , 7.52708299599702979e-01 , 7.19358638525703586e-01 , 6.84752511320240731e-01 , 6.49088138670912418e-01 , 6.12569802816711362e-01 , 5.75406677431996028e-01 , 5.37811629494581500e-01 , 5.00000000000000000e-01 , 4.62188370505418500e-01 , 4.24593322568003917e-01 , 3.87430197183288638e-01 , 3.50911861329087582e-01 , 3.15247488679759269e-01 , 2.80641361474296469e-01 , 2.47291700400296993e-01 , 2.15389529194892071e-01 , 1.85117580463901837e-01 , 1.56649248982524358e-01 , 1.30147598465036901e-01 , 1.05764427476295317e-01 , 8.36393997993193361e-02 , 6.38992441537792888e-02 , 4.66570276209494136e-02 , 3.20115062510730880e-02 , 2.00465541348268869e-02 , 1.08306632194583082e-02 , 4.41644515049184616e-03 , 8.39205712614279203e-04 }, { 2.15307017908244374e-03 , 4.99996938695297308e-03 , 7.82246920390929426e-03 , 1.06005316843897773e-02 , 1.33179496035552222e-02 , 1.59591058658496397e-02 , 1.85088583517539935e-02 , 2.09525975979548452e-02 , 2.32763241845071710e-02 , 2.54667271473087466e-02 , 2.75112596212893704e-02 , 2.93982104749359735e-02 , 3.11167712904831598e-02 , 3.26570982267637075e-02 , 3.40103683804383813e-02 , 3.51688303104087455e-02 , 3.61258484305115382e-02 , 3.68759410136117322e-02 , 3.74148115881107746e-02 , 3.77393735463579100e-02 , 3.78477678236491880e-02 , 3.77393735463579100e-02 , 3.74148115881107746e-02 , 3.68759410136117322e-02 , 3.61258484305115382e-02 , 3.51688303104087455e-02 , 3.40103683804383813e-02 , 3.26570982267637075e-02 , 3.11167712904831598e-02 , 2.93982104749359735e-02 , 2.75112596212893704e-02 , 2.54667271473087466e-02 , 2.32763241845071710e-02 , 2.09525975979548452e-02 , 1.85088583517539935e-02 , 1.59591058658496397e-02 , 1.33179496035552222e-02 , 1.06005316843897773e-02 , 7.82246920390929426e-03 , 4.99996938695297308e-03 , 2.15307017908244374e-03 }, + { 9.99199809495031177e-01 , 9.95788644170430448e-01 , 9.89671254031874059e-01 , 9.80879682669102193e-01 , 9.69461778677494057e-01 , 9.55479862452063733e-01 , 9.39010284906086401e-01 , 9.20142991630908402e-01 , 8.98981026627743707e-01 , 8.75639967844740186e-01 , 8.50247295278085624e-01 , 8.22941694434623949e-01 , 7.93872298742554605e-01 , 7.63197874965596101e-01 , 7.31085956035210982e-01 , 6.97711926021487461e-01 , 6.63258062232705781e-01 , 6.27912539671439562e-01 , 5.91868403282427291e-01 , 5.55322513604259882e-01 , 5.18474471582675900e-01 , 4.81525528417324100e-01 , 4.44677486395740063e-01 , 4.08131596717572709e-01 , 3.72087460328560438e-01 , 3.36741937767294219e-01 , 3.02288073978512484e-01 , 2.68914043964789018e-01 , 2.36802125034403843e-01 , 2.06127701257445339e-01 , 1.77058305565376078e-01 , 1.49752704721914404e-01 , 1.24360032155259759e-01 , 1.01018973372256293e-01 , 7.98570083690915422e-02 , 6.09897150939136268e-02 , 4.45201375479362740e-02 , 3.05382213225059117e-02 , 1.91203173308977549e-02 , 1.03287459681259026e-02 , 4.21135582956953976e-03 , 8.00190504968792469e-04 }, { 2.05299930232454237e-03 , 4.76811015087425134e-03 , 7.46122184867874672e-03 , 1.01139347845263221e-02 , 1.27114797630565237e-02 , 1.52396203498017333e-02 , 1.76845355487960550e-02 , 2.00328675903461290e-02 , 2.22717888859829405e-02 , 2.43890703964016221e-02 , 2.63731478495870357e-02 , 2.82131846790091914e-02 , 2.98991311137933279e-02 , 3.14217790225012894e-02 , 3.27728121824544874e-02 , 3.39448516882609741e-02 , 3.49314962462970793e-02 , 3.57273571325854924e-02 , 3.63280876219020527e-02 , 3.67304067267337636e-02 , 3.69321171160864395e-02 , 3.69321171160864395e-02 , 3.67304067267337636e-02 , 3.63280876219020527e-02 , 3.57273571325854924e-02 , 3.49314962462970793e-02 , 3.39448516882609741e-02 , 3.27728121824544874e-02 , 3.14217790225012894e-02 , 2.98991311137933279e-02 , 2.82131846790091914e-02 , 2.63731478495870357e-02 , 2.43890703964016221e-02 , 2.22717888859829405e-02 , 2.00328675903461290e-02 , 1.76845355487960550e-02 , 1.52396203498017333e-02 , 1.27114797630565237e-02 , 1.01139347845263221e-02 , 7.46122184867874672e-03 , 4.76811015087425134e-03 , 2.05299930232454237e-03 }, + { 9.99236166121253877e-01 , 9.95979778796622028e-01 , 9.90139110490127705e-01 , 9.81743306507040003e-01 , 9.70835978423818968e-01 , 9.57473953603069416e-01 , 9.41726882609308369e-01 , 9.23676858104657494e-01 , 9.03417982068469350e-01 , 8.81055873597477612e-01 , 8.56707117634478488e-01 , 8.30498656875749086e-01 , 8.02567129819800495e-01 , 7.73058158330042322e-01 , 7.42125588392867352e-01 , 7.09930688014634659e-01 , 6.76641306432151923e-01 , 6.42430999016456838e-01 , 6.07478122430259115e-01 , 5.71964904755356662e-01 , 5.36076495437293077e-01 , 5.00000000000000000e-01 , 4.63923504562706868e-01 , 4.28035095244643338e-01 , 3.92521877569740885e-01 , 3.57569000983543162e-01 , 3.23358693567848077e-01 , 2.90069311985365397e-01 , 2.57874411607132648e-01 , 2.26941841669957650e-01 , 1.97432870180199532e-01 , 1.69501343124250942e-01 , 1.43292882365521485e-01 , 1.18944126402522443e-01 , 9.65820179315306782e-02 , 7.63231418953424778e-02 , 5.82731173906915687e-02 , 4.25260463969306321e-02 , 2.91640215761810699e-02 , 1.82566934929600036e-02 , 9.86088950987233474e-03 , 4.02022120337792652e-03 , 7.63833878746143237e-04 }, { 1.95974512692206372e-03 , 4.55199831870070192e-03 , 7.12437821578824296e-03 , 9.65995071184195045e-03 , 1.21452283069194075e-02 , 1.45672066307492472e-02 , 1.69132460434301447e-02 , 1.91711110970663283e-02 , 2.13290285989910407e-02 , 2.33757473771732879e-02 , 2.53005963921950766e-02 , 2.70935401594408938e-02 , 2.87452309784552579e-02 , 3.02470576249956463e-02 , 3.15911902246980569e-02 , 3.27706210631613995e-02 , 3.37792011146825846e-02 , 3.46116720968283401e-02 , 3.52636938825425170e-02 , 3.57318671262570678e-02 , 3.60137509857109891e-02 , 3.61078758468994926e-02 , 3.60137509857109891e-02 , 3.57318671262570678e-02 , 3.52636938825425170e-02 , 3.46116720968283401e-02 , 3.37792011146825846e-02 , 3.27706210631613995e-02 , 3.15911902246980569e-02 , 3.02470576249956463e-02 , 2.87452309784552579e-02 , 2.70935401594408938e-02 , 2.53005963921950766e-02 , 2.33757473771732879e-02 , 2.13290285989910407e-02 , 1.91711110970663283e-02 , 1.69132460434301447e-02 , 1.45672066307492472e-02 , 1.21452283069194075e-02 , 9.65995071184195045e-03 , 7.12437821578824296e-03 , 4.55199831870070192e-03 , 1.95974512692206372e-03 }, + { 9.99270100318387144e-01 , 9.96158196069257929e-01 , 9.90575916538956935e-01 , 9.82549825211246564e-01 , 9.72119754559097049e-01 , 9.59337629992087937e-01 , 9.44267119143021638e-01 , 9.26983297502355197e-01 , 9.07572269822567446e-01 , 8.86130739624377939e-01 , 8.62765526830358453e-01 , 8.37593035333061176e-01 , 8.10738672951787920e-01 , 7.82336226592735384e-01 , 7.52527195694101092e-01 , 7.21460087262705718e-01 , 6.89289676007353580e-01 , 6.56176233251392960e-01 , 6.22284728464100656e-01 , 5.87784007387758378e-01 , 5.52845950854326640e-01 , 5.17644618482067664e-01 , 4.82355381517932336e-01 , 4.47154049145673360e-01 , 4.12215992612241622e-01 , 3.77715271535899344e-01 , 3.43823766748607096e-01 , 3.10710323992646420e-01 , 2.78539912737294282e-01 , 2.47472804305898852e-01 , 2.17663773407264616e-01 , 1.89261327048212080e-01 , 1.62406964666938824e-01 , 1.37234473169641491e-01 , 1.13869260375622047e-01 , 9.24277301774324989e-02 , 7.30167024976448031e-02 , 5.57328808569783965e-02 , 4.06623700079121117e-02 , 2.78802454409029510e-02 , 1.74501747887534295e-02 , 9.42408346104301603e-03 , 3.84180393074209578e-03 , 7.29899681612887550e-04 }, { 1.87270240155638880e-03 , 4.35024068376242169e-03 , 6.80979337778999261e-03 , 9.23574086840737475e-03 , 1.16157409510096055e-02 , 1.39378914106405051e-02 , 1.61906114060349111e-02 , 1.83626739069044365e-02 , 2.04432561551731104e-02 , 2.24219920409850157e-02 , 2.42890232241760179e-02 , 2.60350480458522299e-02 , 2.76513677818640280e-02 , 2.91299299387977467e-02 , 3.04633683507809852e-02 , 3.16450398666019289e-02 , 3.26690574395907193e-02 , 3.35303194531468285e-02 , 3.42245351346833274e-02 , 3.47482459307862923e-02 , 3.50988427367791081e-02 , 3.52745788946770347e-02 , 3.52745788946770347e-02 , 3.50988427367791081e-02 , 3.47482459307862923e-02 , 3.42245351346833274e-02 , 3.35303194531468285e-02 , 3.26690574395907193e-02 , 3.16450398666019289e-02 , 3.04633683507809852e-02 , 2.91299299387977467e-02 , 2.76513677818640280e-02 , 2.60350480458522299e-02 , 2.42890232241760179e-02 , 2.24219920409850157e-02 , 2.04432561551731104e-02 , 1.83626739069044365e-02 , 1.61906114060349111e-02 , 1.39378914106405051e-02 , 1.16157409510096055e-02 , 9.23574086840737475e-03 , 6.80979337778999261e-03 , 4.35024068376242169e-03 , 1.87270240155638880e-03 }, + { 9.99301822590968336e-01 , 9.96324999223601848e-01 , 9.90984357517270320e-01 , 9.83304155198447272e-01 , 9.73320845497814502e-01 , 9.61081968359500216e-01 , 9.46645835876620878e-01 , 9.30081237980332154e-01 , 9.11467110251043211e-01 , 8.90892156296953175e-01 , 8.68454424472745123e-01 , 8.44260840385600231e-01 , 8.18426697226611655e-01 , 7.91075106284676588e-01 , 7.62336410231458039e-01 , 7.32347561959817539e-01 , 7.01251471929270953e-01 , 6.69196327125301083e-01 , 6.36334884876188722e-01 , 6.02823744891631819e-01 , 5.68822602991626569e-01 , 5.34493490081572098e-01 , 5.00000000000000000e-01 , 4.65506509918427902e-01 , 4.31177397008373486e-01 , 3.97176255108368126e-01 , 3.63665115123811222e-01 , 3.30803672874698917e-01 , 2.98748528070729047e-01 , 2.67652438040182461e-01 , 2.37663589768541961e-01 , 2.08924893715323412e-01 , 1.81573302773388318e-01 , 1.55739159614399741e-01 , 1.31545575527254821e-01 , 1.09107843703046853e-01 , 8.85328897489568306e-02 , 6.99187620196678877e-02 , 5.33541641233791289e-02 , 3.89180316404998047e-02 , 2.66791545021854704e-02 , 1.66958448015526971e-02 , 9.01564248272971637e-03 , 3.67500077639812926e-03 , 6.98177409031680942e-04 }, { 1.79133157764177942e-03 , 4.16159464810912042e-03 , 6.51555249579139229e-03 , 8.83876762896879456e-03 , 1.11199237752893660e-02 , 1.33481069837888319e-02 , 1.55126874672577332e-02 , 1.76033461008045095e-02 , 1.96101183646512252e-02 , 2.15234403545824862e-02 , 2.33341938591866832e-02 , 2.50337496189760138e-02 , 2.66140083656344756e-02 , 2.80674393798932380e-02 , 2.93871163594208694e-02 , 3.05667504155332607e-02 , 3.16007200369099669e-02 , 3.24840978753617171e-02 , 3.32126742249212667e-02 , 3.37829770818037708e-02 , 3.41922886893348404e-02 , 3.44386584888306604e-02 , 3.45209124146160090e-02 , 3.44386584888306604e-02 , 3.41922886893348404e-02 , 3.37829770818037708e-02 , 3.32126742249212667e-02 , 3.24840978753617171e-02 , 3.16007200369099669e-02 , 3.05667504155332607e-02 , 2.93871163594208694e-02 , 2.80674393798932380e-02 , 2.66140083656344756e-02 , 2.50337496189760138e-02 , 2.33341938591866832e-02 , 2.15234403545824862e-02 , 1.96101183646512252e-02 , 1.76033461008045095e-02 , 1.55126874672577332e-02 , 1.33481069837888319e-02 , 1.11199237752893660e-02 , 8.83876762896879456e-03 , 6.51555249579139229e-03 , 4.16159464810912042e-03 , 1.79133157764177942e-03 }, + { 9.99331521066908923e-01 , 9.96481174453087148e-01 , 9.91366834902083438e-01 , 9.84010695926995971e-01 , 9.74446181723044869e-01 , 9.62716899403377013e-01 , 9.48876355766970936e-01 , 9.32987697433429020e-01 , 9.15123418533033028e-01 , 8.95365028537637109e-01 , 8.73802679807832994e-01 , 8.50534756010202786e-01 , 8.25667423100998832e-01 , 7.99314144856357545e-01 , 7.71595165130901317e-01 , 7.42636959194082347e-01 , 7.12571656641414197e-01 , 6.81536438510497833e-01 , 6.49672911350934967e-01 , 6.17126461103134849e-01 , 5.84045589733551807e-01 , 5.50581237652792099e-01 , 5.16886095008026070e-01 , 4.83113904991973986e-01 , 4.49418762347207901e-01 , 4.15954410266448249e-01 , 3.82873538896865095e-01 , 3.50327088649064977e-01 , 3.18463561489502167e-01 , 2.87428343358585803e-01 , 2.57363040805917653e-01 , 2.28404834869098683e-01 , 2.00685855143642428e-01 , 1.74332576899001140e-01 , 1.49465243989797159e-01 , 1.26197320192166978e-01 , 1.04634971462362877e-01 , 8.48765814669669716e-02 , 6.70123025665709665e-02 , 5.11236442330290156e-02 , 3.72831005966230214e-02 , 2.55538182769551037e-02 , 1.59893040730040292e-02 , 8.63316509791656889e-03 , 3.51882554691281772e-03 , 6.68478933091009426e-04 }, { 1.71515043405352416e-03 , 3.98494911486231129e-03 , 6.23994188549434163e-03 , 8.46675700391811940e-03 , 1.06549993770682500e-02 , 1.27946431985650061e-02 , 1.48759147761013781e-02 , 1.68893139995534500e-02 , 1.88256526786930341e-02 , 2.06760950548393642e-02 , 2.24321976386590641e-02 , 2.40859475508561002e-02 , 2.56297990035715094e-02 , 2.70567076929283772e-02 , 2.83601629219956165e-02 , 2.95342172977731583e-02 , 3.05735138623252391e-02 , 3.14733105321972559e-02 , 3.22295017335695322e-02 , 3.28386371338906038e-02 , 3.32979373842274412e-02 , 3.36053068003390881e-02 , 3.37593429245182305e-02 , 3.37593429245182305e-02 , 3.36053068003390881e-02 , 3.32979373842274412e-02 , 3.28386371338906038e-02 , 3.22295017335695322e-02 , 3.14733105321972559e-02 , 3.05735138623252391e-02 , 2.95342172977731583e-02 , 2.83601629219956165e-02 , 2.70567076929283772e-02 , 2.56297990035715094e-02 , 2.40859475508561002e-02 , 2.24321976386590641e-02 , 2.06760950548393642e-02 , 1.88256526786930341e-02 , 1.68893139995534500e-02 , 1.48759147761013781e-02 , 1.27946431985650061e-02 , 1.06549993770682500e-02 , 8.46675700391811940e-03 , 6.23994188549434163e-03 , 3.98494911486231129e-03 , 1.71515043405352416e-03 }, + { 9.99359364292106034e-01 , 9.96627605493884294e-01 , 9.91725501535811849e-01 , 9.84673393663282215e-01 , 9.75501984628854180e-01 , 9.64251346506180274e-01 , 9.50970664719262615e-01 , 9.35718007898448167e-01 , 9.18560069949951097e-01 , 8.99571877083870985e-01 , 8.78836459222719357e-01 , 8.56444486704532104e-01 , 8.32493873695166364e-01 , 8.07089349978186821e-01 , 7.80342002967332138e-01 , 7.52368791931788961e-01 , 7.23292036552427797e-01 , 6.93238882042333526e-01 , 6.62340743168867929e-01 , 6.30732729607487275e-01 , 5.98553055139555923e-01 , 5.65942433277257462e-01 , 5.33043461958177867e-01 , 5.00000000000000000e-01 , 4.66956538041822133e-01 , 4.34057566722742538e-01 , 4.01446944860444077e-01 , 3.69267270392512725e-01 , 3.37659256831132071e-01 , 3.06761117957666418e-01 , 2.76707963447572147e-01 , 2.47631208068211039e-01 , 2.19657997032667890e-01 , 1.92910650021813179e-01 , 1.67506126304833636e-01 , 1.43555513295467840e-01 , 1.21163540777280684e-01 , 1.00428122916129028e-01 , 8.14399300500489448e-02 , 6.42819921015518464e-02 , 4.90293352807373226e-02 , 3.57486534938196779e-02 , 2.44980153711457788e-02 , 1.53266063367177505e-02 , 8.27449846418814618e-03 , 3.37239450611568270e-03 , 6.40635707893945361e-04 }, { 1.64372692126400744e-03 , 3.81930814792441663e-03 , 5.98142423215616056e-03 , 8.11766657321652887e-03 , 1.02184690738342139e-02 , 1.22746058298294092e-02 , 1.42770753503216937e-02 , 1.62171177575923774e-02 , 1.80862482920874749e-02 , 1.98762930612655028e-02 , 2.15794243242397703e-02 , 2.31881945432529553e-02 , 2.46955688736805838e-02 , 2.60949558900285712e-02 , 2.73802363907651135e-02 , 2.85457901466157696e-02 , 2.95865204711694384e-02 , 3.04978765043698238e-02 , 3.12758731104608306e-02 , 3.19171083028585156e-02 , 3.24187781194728644e-02 , 3.27786888832748702e-02 , 3.29952667944052383e-02 , 3.30675648118277377e-02 , 3.29952667944052383e-02 , 3.27786888832748702e-02 , 3.24187781194728644e-02 , 3.19171083028585156e-02 , 3.12758731104608306e-02 , 3.04978765043698238e-02 , 2.95865204711694384e-02 , 2.85457901466157696e-02 , 2.73802363907651135e-02 , 2.60949558900285712e-02 , 2.46955688736805838e-02 , 2.31881945432529553e-02 , 2.15794243242397703e-02 , 1.98762930612655028e-02 , 1.80862482920874749e-02 , 1.62171177575923774e-02 , 1.42770753503216937e-02 , 1.22746058298294092e-02 , 1.02184690738342139e-02 , 8.11766657321652887e-03 , 5.98142423215616056e-03 , 3.81930814792441663e-03 , 1.64372692126400744e-03 }, + { 9.99385503626213034e-01 , 9.96765086133175382e-01 , 9.92062291861413481e-01 , 9.85295796273123581e-01 , 9.76493851580215400e-01 , 9.65693345353277222e-01 , 9.52939568357784816e-01 , 9.38286010137123982e-01 , 9.21794130812196744e-01 , 9.03533102014721257e-01 , 8.83579516257870123e-01 , 8.62017065461907261e-01 , 8.38936189816331890e-01 , 8.14433698388256744e-01 , 7.88612363041986342e-01 , 7.61580487361116498e-01 , 7.33451452375479152e-01 , 7.04343240995358388e-01 , 6.74377943146080350e-01 , 6.43681243677727832e-01 , 6.12381895197344539e-01 , 5.80611178034445841e-01 , 5.48502349604731321e-01 , 5.16190085481434635e-01 , 4.83809914518565309e-01 , 4.51497650395268624e-01 , 4.19388821965554159e-01 , 3.87618104802655461e-01 , 3.56318756322272223e-01 , 3.25622056853919650e-01 , 2.95656759004641612e-01 , 2.66548547624520793e-01 , 2.38419512638883474e-01 , 2.11387636958013658e-01 , 1.85566301611743201e-01 , 1.61063810183668055e-01 , 1.37982934538092683e-01 , 1.16420483742129835e-01 , 9.64668979852786879e-02 , 7.82058691878032286e-02 , 6.17139898628760591e-02 , 4.70604316422151628e-02 , 3.43066546467228339e-02 , 2.35061484197845692e-02 , 1.47042037268763741e-02 , 7.93770813858657096e-03 , 3.23491386682462105e-03 , 6.14496373786940710e-04 }, { 1.57667302615291925e-03 , 3.66377695063813125e-03 , 5.73861728961726995e-03 , 7.78965786147192436e-03 , 9.80808022867776449e-03 , 1.17853804196621885e-02 , 1.37132548541784739e-02 , 1.55836139163990448e-02 , 1.73886112823852176e-02 , 1.91206755329153544e-02 , 2.07725414717323739e-02 , 2.23372804283471400e-02 , 2.38083292462452356e-02 , 2.51795177769272363e-02 , 2.64450947425968336e-02 , 2.75997518499920824e-02 , 2.86386460502016070e-02 , 2.95574198491978177e-02 , 3.03522195829469404e-02 , 3.10197115799463324e-02 , 3.15570961431270100e-02 , 3.19621192923240927e-02 , 3.22330822179750440e-02 , 3.23688484063419588e-02 , 3.23688484063419588e-02 , 3.22330822179750440e-02 , 3.19621192923240927e-02 , 3.15570961431270100e-02 , 3.10197115799463324e-02 , 3.03522195829469404e-02 , 2.95574198491978177e-02 , 2.86386460502016070e-02 , 2.75997518499920824e-02 , 2.64450947425968336e-02 , 2.51795177769272363e-02 , 2.38083292462452356e-02 , 2.23372804283471400e-02 , 2.07725414717323739e-02 , 1.91206755329153544e-02 , 1.73886112823852176e-02 , 1.55836139163990448e-02 , 1.37132548541784739e-02 , 1.17853804196621885e-02 , 9.80808022867776449e-03 , 7.78965786147192436e-03 , 5.73861728961726995e-03 , 3.66377695063813125e-03 , 1.57667302615291925e-03 }, + { 9.99410075303317713e-01 , 9.96894330972083909e-01 , 9.92378947957106461e-01 , 9.85881100450777703e-01 , 9.77426829337068592e-01 , 9.67050147377905067e-01 , 9.54792827914036635e-01 , 9.40704222786504451e-01 , 9.24841059922082875e-01 , 9.07267213679927687e-01 , 8.88053447172723276e-01 , 8.67277127118701308e-01 , 8.45021912212566062e-01 , 8.21377416209618794e-01 , 7.96438847054450338e-01 , 7.70306623495862985e-01 , 7.43085970726246048e-01 , 7.14886496670788296e-01 , 6.85821750631142479e-01 , 6.56008766059874349e-01 , 6.25567589306288641e-01 , 5.94620796230906801e-01 , 5.63292998634836062e-01 , 5.31710342491343413e-01 , 5.00000000000000000e-01 , 4.68289657508656587e-01 , 4.36707001365163994e-01 , 4.05379203769093199e-01 , 3.74432410693711359e-01 , 3.43991233940125596e-01 , 3.14178249368857576e-01 , 2.85113503329211759e-01 , 2.56914029273753952e-01 , 2.29693376504136959e-01 , 2.03561152945549634e-01 , 1.78622583790381151e-01 , 1.54978087787433938e-01 , 1.32722872881298637e-01 , 1.11946552827276682e-01 , 9.27327863200722857e-02 , 7.51589400779171524e-02 , 5.92957772134955416e-02 , 4.52071720859633583e-02 , 3.29498526220949259e-02 , 2.25731706629313834e-02 , 1.41188995492223107e-02 , 7.62105204289349747e-03 , 3.10566902791610446e-03 , 5.89924696682310283e-04 }, { 1.51363949446145247e-03 , 3.51754979504322572e-03 , 5.51027551579679007e-03 , 7.48107246781232541e-03 , 9.42179792654472895e-03 , 1.13246007937233377e-02 , 1.31818094635330080e-02 , 1.49859423102919123e-02 , 1.67297333958110889e-02 , 1.84061604815003443e-02 , 2.00084728831865094e-02 , 2.15302184906297975e-02 , 2.29652696777979254e-02 , 2.43078479439141210e-02 , 2.55525471650722945e-02 , 2.66943553541294856e-02 , 2.77286748374017955e-02 , 2.86513407650937357e-02 , 2.94586378800136342e-02 , 3.01473154765760087e-02 , 3.07146004895964692e-02 , 3.11582086600286322e-02 , 3.14763537325978490e-02 , 3.16677546482458730e-02 , 3.17316407023953001e-02 , 3.16677546482458730e-02 , 3.14763537325978490e-02 , 3.11582086600286322e-02 , 3.07146004895964692e-02 , 3.01473154765760087e-02 , 2.94586378800136342e-02 , 2.86513407650937357e-02 , 2.77286748374017955e-02 , 2.66943553541294856e-02 , 2.55525471650722945e-02 , 2.43078479439141210e-02 , 2.29652696777979254e-02 , 2.15302184906297975e-02 , 2.00084728831865094e-02 , 1.84061604815003443e-02 , 1.67297333958110889e-02 , 1.49859423102919123e-02 , 1.31818094635330080e-02 , 1.13246007937233377e-02 , 9.42179792654472895e-03 , 7.48107246781232541e-03 , 5.51027551579679007e-03 , 3.51754979504322572e-03 , 1.51363949446145247e-03 }, + { 9.99433202210035510e-01 , 9.97015984716045356e-01 , 9.92677042024002976e-01 , 9.86432192553346021e-01 , 9.78305477621403963e-01 , 9.68328309472438975e-01 , 9.56539278327895981e-01 , 9.42983989761806529e-01 , 9.27714884714972987e-01 , 9.10791035429667994e-01 , 8.92277916450199604e-01 , 8.72247151113034302e-01 , 8.50776234353411098e-01 , 8.27948232842719678e-01 , 8.03851463592475168e-01 , 7.78579152257324991e-01 , 7.52229072453732051e-01 , 7.24903167487019440e-01 , 6.96707155948782519e-01 , 6.67750122709718674e-01 , 6.38144096889766033e-01 , 6.08003618438020865e-01 , 5.77445294999072933e-01 , 5.46587350780043058e-01 , 5.15549169163594390e-01 , 4.84450830836405555e-01 , 4.53412649219956942e-01 , 4.22554705000927067e-01 , 3.91996381561979135e-01 , 3.61855903110234023e-01 , 3.32249877290281326e-01 , 3.03292844051217425e-01 , 2.75096832512980616e-01 , 2.47770927546267894e-01 , 2.21420847742674981e-01 , 1.96148536407524887e-01 , 1.72051767157280322e-01 , 1.49223765646588874e-01 , 1.27752848886965725e-01 , 1.07722083549800368e-01 , 8.92089645703320194e-02 , 7.22851152850269574e-02 , 5.70160102381934777e-02 , 4.34607216721040537e-02 , 3.16716905275610319e-02 , 2.16945223785960269e-02 , 1.35678074466539633e-02 , 7.32295797599705894e-03 , 2.98401528395464367e-03 , 5.66797789964474871e-04 }, { 1.45431127657757054e-03 , 3.37989959787270058e-03 , 5.29527419182548430e-03 , 7.19041138074278698e-03 , 9.05778035674469420e-03 , 1.08901215850623970e-02 , 1.26803367850061958e-02 , 1.44214967902675986e-02 , 1.61068641117890071e-02 , 1.77299178075730757e-02 , 1.92843783062938388e-02 , 2.07642315450738482e-02 , 2.21637521694016369e-02 , 2.34775256519742168e-02 , 2.47004692247331584e-02 , 2.58278515347905684e-02 , 2.68553109444981224e-02 , 2.77788724031062598e-02 , 2.85949628238641902e-02 , 2.93004249066112221e-02 , 2.98925293521327268e-02 , 3.03689854208851091e-02 , 3.07279497951583325e-02 , 3.09680337103416213e-02 , 3.10883083276736298e-02 , 3.10883083276736298e-02 , 3.09680337103416213e-02 , 3.07279497951583325e-02 , 3.03689854208851091e-02 , 2.98925293521327268e-02 , 2.93004249066112221e-02 , 2.85949628238641902e-02 , 2.77788724031062598e-02 , 2.68553109444981224e-02 , 2.58278515347905684e-02 , 2.47004692247331584e-02 , 2.34775256519742168e-02 , 2.21637521694016369e-02 , 2.07642315450738482e-02 , 1.92843783062938388e-02 , 1.77299178075730757e-02 , 1.61068641117890071e-02 , 1.44214967902675986e-02 , 1.26803367850061958e-02 , 1.08901215850623970e-02 , 9.05778035674469420e-03 , 7.19041138074278698e-03 , 5.29527419182548430e-03 , 3.37989959787270058e-03 , 1.45431127657757054e-03 }, + { 9.99454995424451709e-01 , 9.97130630218376224e-01 , 9.92957995867951526e-01 , 9.86951684009661934e-01 , 9.79133924306954118e-01 , 9.69533772001481164e-01 , 9.58186931154890065e-01 , 9.45135609014763678e-01 , 9.30428355591146117e-01 , 9.14119881911532373e-01 , 8.96270856049690590e-01 , 8.76947677242687740e-01 , 8.56222228788518280e-01 , 8.34171610587685075e-01 , 8.10877852300361690e-01 , 7.86427608175651938e-01 , 7.60911834683092869e-01 , 7.34425452143020463e-01 , 7.07066991613151896e-01 , 6.78938228344204697e-01 , 6.50143803167665957e-01 , 6.20790833223899385e-01 , 5.90988513478538757e-01 , 5.60847710509444375e-01 , 5.30480550075289381e-01 , 5.00000000000000000e-01 , 4.69519449924710619e-01 , 4.39152289490555625e-01 , 4.09011486521461243e-01 , 3.79209166776100615e-01 , 3.49856196832334043e-01 , 3.21061771655795247e-01 , 2.92933008386848048e-01 , 2.65574547856979482e-01 , 2.39088165316907075e-01 , 2.13572391824348090e-01 , 1.89122147699638365e-01 , 1.65828389412314953e-01 , 1.43777771211481664e-01 , 1.23052322757312232e-01 , 1.03729143950309396e-01 , 8.58801180884675858e-02 , 6.95716444088538138e-02 , 5.48643909852363498e-02 , 4.18130688451098867e-02 , 3.04662279985188078e-02 , 2.08660756930459032e-02 , 1.30483159903380663e-02 , 7.04200413204850162e-03 , 2.86936978162371289e-03 , 5.45004575548252370e-04 }, { 1.39840358554494770e-03 , 3.25016889162630003e-03 , 5.09259564891086525e-03 , 6.91631700323891083e-03 , 8.71435736170052613e-03 , 1.04799942008516056e-02 , 1.22066502868907172e-02 , 1.38878992970812385e-02 , 1.55174856450800043e-02 , 1.70893466020941680e-02 , 1.85976344616301456e-02 , 2.00367381427482283e-02 , 2.14013039989400418e-02 , 2.26862557038250354e-02 , 2.38868131203115522e-02 , 2.49985100750287036e-02 , 2.60172109683485427e-02 , 2.69391261565227816e-02 , 2.77608260478693462e-02 , 2.84792538601293319e-02 , 2.90917369912960695e-02 , 2.95959969614807729e-02 , 2.99901578887516243e-02 , 3.02727534673688965e-02 , 3.04427324224281724e-02 , 3.04994624206029394e-02 , 3.04427324224281724e-02 , 3.02727534673688965e-02 , 2.99901578887516243e-02 , 2.95959969614807729e-02 , 2.90917369912960695e-02 , 2.84792538601293319e-02 , 2.77608260478693462e-02 , 2.69391261565227816e-02 , 2.60172109683485427e-02 , 2.49985100750287036e-02 , 2.38868131203115522e-02 , 2.26862557038250354e-02 , 2.14013039989400418e-02 , 2.00367381427482283e-02 , 1.85976344616301456e-02 , 1.70893466020941680e-02 , 1.55174856450800043e-02 , 1.38878992970812385e-02 , 1.22066502868907172e-02 , 1.04799942008516056e-02 , 8.71435736170052613e-03 , 6.91631700323891083e-03 , 5.09259564891086525e-03 , 3.25016889162630003e-03 , 1.39840358554494770e-03 }, + { 9.99475555551975092e-01 , 9.97238795464608030e-01 , 9.93223097825774892e-01 , 9.87441942110872217e-01 , 9.79915913466543276e-01 , 9.70671926820679487e-01 , 9.59743064458212225e-01 , 9.47168445267247638e-01 , 9.32993081423033832e-01 , 9.17267716163367219e-01 , 9.00048641715234132e-01 , 8.81397497596872470e-01 , 8.61381049874991644e-01 , 8.40070952113583846e-01 , 8.17543488847622957e-01 , 7.93879302489789551e-01 , 7.69163104642913709e-01 , 7.43483372849047974e-01 , 7.16932033859380868e-01 , 6.89604134558046811e-01 , 6.61597501717403946e-01 , 6.33012391802500907e-01 , 6.03951132078183073e-01 , 5.74517754303474626e-01 , 5.44817622324450301e-01 , 5.14957054898669386e-01 , 4.85042945101330614e-01 , 4.55182377675549699e-01 , 4.25482245696525430e-01 , 3.96048867921816983e-01 , 3.66987608197499093e-01 , 3.38402498282596109e-01 , 3.10395865441953189e-01 , 2.83067966140619187e-01 , 2.56516627150951970e-01 , 2.30836895357086291e-01 , 2.06120697510210449e-01 , 1.82456511152377043e-01 , 1.59929047886416154e-01 , 1.38618950125008411e-01 , 1.18602502403127516e-01 , 9.99513582847658399e-02 , 8.27322838366327251e-02 , 6.70069185769662096e-02 , 5.28315547327523408e-02 , 4.02569355417877334e-02 , 2.93280731793204713e-02 , 2.00840865334567242e-02 , 1.25580578891277481e-02 , 6.77690217422507925e-03 , 2.76120453539198526e-03 , 5.24444448024860913e-04 }, { 1.34565847502355566e-03 , 3.12776198148663823e-03 , 4.90131728973137570e-03 , 6.65755749117048073e-03 , 8.39001169815036842e-03 , 1.00924457539903964e-02 , 1.17587567769922314e-02 , 1.33829768732520067e-02 , 1.49592905735719730e-02 , 1.64820545448594001e-02 , 1.79458174175486165e-02 , 1.93453391552119887e-02 , 2.06756097502801342e-02 , 2.19318671295002030e-02 , 2.31096141863923951e-02 , 2.42046348720374484e-02 , 2.52130092831711894e-02 , 2.61311276919534950e-02 , 2.69557034663786312e-02 , 2.76837848346513267e-02 , 2.83127654511842984e-02 , 2.88403937262634129e-02 , 2.92647808859069353e-02 , 2.95844077330214839e-02 , 2.97981300856240798e-02 , 2.99051828726459301e-02 , 2.99051828726459301e-02 , 2.97981300856240798e-02 , 2.95844077330214839e-02 , 2.92647808859069353e-02 , 2.88403937262634129e-02 , 2.83127654511842984e-02 , 2.76837848346513267e-02 , 2.69557034663786312e-02 , 2.61311276919534950e-02 , 2.52130092831711894e-02 , 2.42046348720374484e-02 , 2.31096141863923951e-02 , 2.19318671295002030e-02 , 2.06756097502801342e-02 , 1.93453391552119887e-02 , 1.79458174175486165e-02 , 1.64820545448594001e-02 , 1.49592905735719730e-02 , 1.33829768732520067e-02 , 1.17587567769922314e-02 , 1.00924457539903964e-02 , 8.39001169815036842e-03 , 6.65755749117048073e-03 , 4.90131728973137570e-03 , 3.12776198148663823e-03 , 1.34565847502355566e-03 }, + { 9.99494973888164107e-01 , 9.97340959654003489e-01 , 9.93473517511685777e-01 , 9.87905116857492271e-01 , 9.80654847311568156e-01 , 9.71747676732220955e-01 , 9.61214301521406078e-01 , 9.49091028937713244e-01 , 9.35419648779120649e-01 , 9.20247288272900699e-01 , 9.03626249208447696e-01 , 8.85613827462766179e-01 , 8.66272115403755150e-01 , 8.45667787800683302e-01 , 8.23871871958255064e-01 , 8.00959502856884664e-01 , 7.77009664138533895e-01 , 7.52104915828566756e-01 , 7.26331109730922853e-01 , 6.99777093476976475e-01 , 6.72534404247861151e-01 , 6.44696953225813107e-01 , 6.16360701862136318e-01 , 5.87623331077662847e-01 , 5.58583904535977616e-01 , 5.29342527150129749e-01 , 5.00000000000000000e-01 , 4.70657472849870251e-01 , 4.41416095464022440e-01 , 4.12376668922337097e-01 , 3.83639298137863682e-01 , 3.55303046774186893e-01 , 3.27465595752138849e-01 , 3.00222906523023525e-01 , 2.73668890269077092e-01 , 2.47895084171433272e-01 , 2.22990335861466049e-01 , 1.99040497143115336e-01 , 1.76128128041744964e-01 , 1.54332212199316643e-01 , 1.33727884596244878e-01 , 1.14386172537233849e-01 , 9.63737507915522623e-02 , 7.97527117270993152e-02 , 6.45803512208793229e-02 , 5.09089710622866870e-02 , 3.87856984785939357e-02 , 2.82523232677790587e-02 , 1.93451526884318332e-02 , 1.20948831425077095e-02 , 6.52648248831423899e-03 , 2.65904034599646075e-03 , 5.05026111835886471e-04 }, { 1.29584186028351592e-03 , 3.01213811347433684e-03 , 4.72060114247017243e-03 , 6.41301307212018955e-03 , 8.08336262834373140e-03 , 9.72586055381844707e-03 , 1.13348365285351037e-02 , 1.29047412553787589e-02 , 1.44301618089118684e-02 , 1.59058392295096628e-02 , 1.73266862917671183e-02 , 1.86878049017414581e-02 , 1.99845029217701892e-02 , 2.12123103172600080e-02 , 2.23669945518364041e-02 , 2.34445751703751572e-02 , 2.44413375163495712e-02 , 2.53538455346463583e-02 , 2.61789536149363601e-02 , 2.69138174343655154e-02 , 2.75559037619667983e-02 , 2.81029991908698547e-02 , 2.85532177681335972e-02 , 2.89050074958565988e-02 , 2.91571556811280053e-02 , 2.93087931163601295e-02 , 2.93593970755821818e-02 , 2.93087931163601295e-02 , 2.91571556811280053e-02 , 2.89050074958565988e-02 , 2.85532177681335972e-02 , 2.81029991908698547e-02 , 2.75559037619667983e-02 , 2.69138174343655154e-02 , 2.61789536149363601e-02 , 2.53538455346463583e-02 , 2.44413375163495712e-02 , 2.34445751703751572e-02 , 2.23669945518364041e-02 , 2.12123103172600080e-02 , 1.99845029217701892e-02 , 1.86878049017414581e-02 , 1.73266862917671183e-02 , 1.59058392295096628e-02 , 1.44301618089118684e-02 , 1.29047412553787589e-02 , 1.13348365285351037e-02 , 9.72586055381844707e-03 , 8.08336262834373140e-03 , 6.41301307212018955e-03 , 4.72060114247017243e-03 , 3.01213811347433684e-03 , 1.29584186028351592e-03 }, + { 9.99513333433670437e-01 , 9.97437558509169486e-01 , 9.93710318698671768e-01 , 9.88343164428951648e-01 , 9.81353822892961802e-01 , 9.72765487582497923e-01 , 9.62606679933325715e-01 , 9.50911143142350812e-01 , 9.37717727032784443e-01 , 9.23070257985386444e-01 , 9.07017392956783963e-01 , 8.89612457673127022e-01 , 8.70913269404592127e-01 , 8.50981944859586448e-01 , 8.29884693815991614e-01 , 8.07691599165563656e-01 , 7.84476384097604673e-01 , 7.60316167192966574e-01 , 7.35291206240691109e-01 , 7.09484631627602225e-01 , 6.82982170186095638e-01 , 6.55871860417234109e-01 , 6.28243760034998600e-01 , 6.00189646803106824e-01 , 5.71802713658128070e-01 , 5.43177259131624068e-01 , 5.14408374099670884e-01 , 4.85591625900329116e-01 , 4.56822740868375876e-01 , 4.28197286341871930e-01 , 3.99810353196893231e-01 , 3.71756239965001345e-01 , 3.44128139582765891e-01 , 3.17017829813904417e-01 , 2.90515368372397720e-01 , 2.64708793759308836e-01 , 2.39683832807033453e-01 , 2.15523615902395271e-01 , 1.92308400834436316e-01 , 1.70115306184008441e-01 , 1.49018055140413552e-01 , 1.29086730595407845e-01 , 1.10387542326872992e-01 , 9.29826070432160784e-02 , 7.69297420146135280e-02 , 6.22822729672155295e-02 , 4.90888568576492088e-02 , 3.73933200666742571e-02 , 2.72345124175020735e-02 , 1.86461771070382080e-02 , 1.16568355710483813e-02 , 6.28968130132822115e-03 , 2.56244149083055756e-03 , 4.86666566329508048e-04 }, { 1.24874091788079299e-03 , 2.90280550761999254e-03 , 4.54968472775469854e-03 , 6.18166406442382209e-03 , 7.79315151796206550e-03 , 9.37876381073468948e-03 , 1.09332257114265422e-02 , 1.24513707336043871e-02 , 1.39281546552979356e-02 , 1.53586712489353384e-02 , 1.67381682321863234e-02 , 1.80620629201917772e-02 , 1.93259573910512586e-02 , 2.05256530683224879e-02 , 2.16571646547985067e-02 , 2.27167333641383577e-02 , 2.37008394032224949e-02 , 2.46062136622644430e-02 , 2.54298485730940702e-02 , 2.61690080991493733e-02 , 2.68212368237768055e-02 , 2.73843681065289932e-02 , 2.78565312802949924e-02 , 2.82361578653129823e-02 , 2.85219867793972993e-02 , 2.87130685270560564e-02 , 2.88087683535735127e-02 , 2.88087683535735127e-02 , 2.87130685270560564e-02 , 2.85219867793972993e-02 , 2.82361578653129823e-02 , 2.78565312802949924e-02 , 2.73843681065289932e-02 , 2.68212368237768055e-02 , 2.61690080991493733e-02 , 2.54298485730940702e-02 , 2.46062136622644430e-02 , 2.37008394032224949e-02 , 2.27167333641383577e-02 , 2.16571646547985067e-02 , 2.05256530683224879e-02 , 1.93259573910512586e-02 , 1.80620629201917772e-02 , 1.67381682321863234e-02 , 1.53586712489353384e-02 , 1.39281546552979356e-02 , 1.24513707336043871e-02 , 1.09332257114265422e-02 , 9.37876381073468948e-03 , 7.79315151796206550e-03 , 6.18166406442382209e-03 , 4.54968472775469854e-03 , 2.90280550761999254e-03 , 1.24874091788079299e-03 }, + { 9.99530709782409321e-01 , 9.97528988923705895e-01 , 9.93934470599444619e-01 , 9.88757867751994590e-01 , 9.82015664296567614e-01 , 9.73729434020605411e-01 , 9.63925712360395814e-01 , 9.52635900371999966e-01 , 9.39896161209947789e-01 , 9.25747303308577241e-01 , 9.10234649279660468e-01 , 8.93407890563811202e-01 , 8.75320928174010970e-01 , 8.56031699993318851e-01 , 8.35601995159913180e-01 , 8.14097256124964086e-01 , 7.91586369013016045e-01 , 7.68141442954171638e-01 , 7.43837579093737045e-01 , 7.18752630018587246e-01 , 6.92966950370489720e-01 , 6.66563139445011887e-01 , 6.39625776600403317e-01 , 6.12241150323922789e-01 , 5.84496981823436568e-01 , 5.56482144029664672e-01 , 5.28286376909168354e-01 , 5.00000000000000000e-01 , 4.71713623090831591e-01 , 4.43517855970335384e-01 , 4.15503018176563377e-01 , 3.87758849676077266e-01 , 3.60374223399596738e-01 , 3.33436860554988057e-01 , 3.07033049629510280e-01 , 2.81247369981412698e-01 , 2.56162420906262955e-01 , 2.31858557045828362e-01 , 2.08413630986983955e-01 , 1.85902743875035914e-01 , 1.64398004840086792e-01 , 1.43968300006681094e-01 , 1.24679071825989043e-01 , 1.06592109436188812e-01 , 8.97653507203395457e-02 , 7.42526966914227593e-02 , 6.01038387900522456e-02 , 4.73640996279999851e-02 , 3.60742876396041509e-02 , 2.62705659793946306e-02 , 1.79843357034323997e-02 , 1.12421322480053959e-02 , 6.06552940055540054e-03 , 2.47101107629406260e-03 , 4.69290217590729263e-04 }, { 1.20416180998989442e-03 , 2.79931613328038374e-03 , 4.38787305352926395e-03 , 5.96258035992430595e-03 , 7.51822916675589422e-03 , 9.04980726036453201e-03 , 1.05524008340082270e-02 , 1.20211940048628105e-02 , 1.34514807281981355e-02 , 1.48386788825805201e-02 , 1.61783446130929140e-02 , 1.74661864367949421e-02 , 1.86980789339827730e-02 , 1.98700759371685902e-02 , 2.09784231588593800e-02 , 2.20195702108032937e-02 , 2.29901819731419196e-02 , 2.38871492756003480e-02 , 2.47075988557758711e-02 , 2.54489025622469875e-02 , 2.61086857728160433e-02 , 2.66848350008027368e-02 , 2.71755046649555521e-02 , 2.75791230012543444e-02 , 2.78943970976420416e-02 , 2.81203170355421826e-02 , 2.82561591248860003e-02 , 2.83014882222802112e-02 , 2.82561591248860003e-02 , 2.81203170355421826e-02 , 2.78943970976420416e-02 , 2.75791230012543444e-02 , 2.71755046649555521e-02 , 2.66848350008027368e-02 , 2.61086857728160433e-02 , 2.54489025622469875e-02 , 2.47075988557758711e-02 , 2.38871492756003480e-02 , 2.29901819731419196e-02 , 2.20195702108032937e-02 , 2.09784231588593800e-02 , 1.98700759371685902e-02 , 1.86980789339827730e-02 , 1.74661864367949421e-02 , 1.61783446130929140e-02 , 1.48386788825805201e-02 , 1.34514807281981355e-02 , 1.20211940048628105e-02 , 1.05524008340082270e-02 , 9.04980726036453201e-03 , 7.51822916675589422e-03 , 5.96258035992430595e-03 , 4.38787305352926395e-03 , 2.79931613328038374e-03 , 1.20416180998989442e-03 }, + { 9.99547171900732834e-01 , 9.97615613040534921e-01 , 9.94146857770080716e-01 , 9.89150854570128191e-01 , 9.82642950952745120e-01 , 9.74643239780981330e-01 , 9.65176440123748147e-01 , 9.54271810210327698e-01 , 9.41963054163913793e-01 , 9.28288216881374306e-01 , 9.13289566071440850e-01 , 8.97013461446933280e-01 , 8.79510211352564464e-01 , 8.60833917225094059e-01 , 8.41042306347235202e-01 , 8.20196553403503392e-01 , 7.98361091385331623e-01 , 7.75603412427767314e-01 , 7.51993859192190861e-01 , 7.27605407439229745e-01 , 7.02513440463545580e-01 , 6.76795516087477234e-01 , 6.50531126933610371e-01 , 6.23801454717168635e-01 , 5.96689119317637573e-01 , 5.69277923405188124e-01 , 5.41652593411217742e-01 , 5.13898517643637698e-01 , 4.86101482356362302e-01 , 4.58347406588782313e-01 , 4.30722076594811876e-01 , 4.03310880682362372e-01 , 3.76198545282831365e-01 , 3.49468873066389685e-01 , 3.23204483912522766e-01 , 2.97486559536454365e-01 , 2.72394592560770199e-01 , 2.48006140807809139e-01 , 2.24396587572232686e-01 , 2.01638908614668350e-01 , 1.79803446596496552e-01 , 1.58957693652764770e-01 , 1.39166082774905969e-01 , 1.20489788647435550e-01 , 1.02986538553066748e-01 , 8.67104339285591774e-02 , 7.17117831186256799e-02 , 5.80369458360862275e-02 , 4.57281897896722536e-02 , 3.48235598762518528e-02 , 2.53567602190186807e-02 , 1.73570490472549077e-02 , 1.08491454298718076e-02 , 5.85314222991924465e-03 , 2.38438695946512633e-03 , 4.52828099267207798e-04 }, { 1.16192768788660780e-03 , 2.70126112300766909e-03 , 4.23453158165394347e-03 , 5.75491217019169152e-03 , 7.25754463901073614e-03 , 8.73775645570047318e-03 , 1.01909649412012856e-02 , 1.16126757812826577e-02 , 1.29984935291959751e-02 , 1.43441342369113704e-02 , 1.56454383736552224e-02 , 1.68983835578058808e-02 , 1.80990969361575944e-02 , 1.92438671296238303e-02 , 2.03291556923722583e-02 , 2.13516080423335440e-02 , 2.23080638263461403e-02 , 2.31955666865009472e-02 , 2.40113733968001300e-02 , 2.47529623415237883e-02 , 2.54180413088992418e-02 , 2.60045545758707010e-02 , 2.65106892620053831e-02 , 2.69348809328572442e-02 , 2.72758184354447118e-02 , 2.75324479508812121e-02 , 2.77039762516225613e-02 , 2.77898731532571983e-02 , 2.77898731532571983e-02 , 2.77039762516225613e-02 , 2.75324479508812121e-02 , 2.72758184354447118e-02 , 2.69348809328572442e-02 , 2.65106892620053831e-02 , 2.60045545758707010e-02 , 2.54180413088992418e-02 , 2.47529623415237883e-02 , 2.40113733968001300e-02 , 2.31955666865009472e-02 , 2.23080638263461403e-02 , 2.13516080423335440e-02 , 2.03291556923722583e-02 , 1.92438671296238303e-02 , 1.80990969361575944e-02 , 1.68983835578058808e-02 , 1.56454383736552224e-02 , 1.43441342369113704e-02 , 1.29984935291959751e-02 , 1.16126757812826577e-02 , 1.01909649412012856e-02 , 8.73775645570047318e-03 , 7.25754463901073614e-03 , 5.75491217019169152e-03 , 4.23453158165394347e-03 , 2.70126112300766909e-03 , 1.16192768788660780e-03 }, + { 9.99562782812631445e-01 , 9.97697761839215103e-01 , 9.94348288825111060e-01 , 9.89523613354734377e-01 , 9.83238042585943273e-01 , 9.75510313223938330e-01 , 9.66363480533550812e-01 , 9.55824839260695613e-01 , 9.43925839441110637e-01 , 9.30701991631023517e-01 , 9.16192760575219589e-01 , 9.00441447273609086e-01 , 8.83495059679725081e-01 , 8.65404172372261637e-01 , 8.46222775599758892e-01 , 8.26008114140488470e-01 , 8.04820516454357704e-01 , 7.82723214634618358e-01 , 7.59782155695593819e-01 , 7.36065804758987863e-01 , 7.11644940725781994e-01 , 6.86592445043297195e-01 , 6.60983084197689363e-01 , 6.34893286580919369e-01 , 6.08400914398061987e-01 , 5.81585031295632104e-01 , 5.54525666404393935e-01 , 5.27303575500823407e-01 , 5.00000000000000000e-01 , 4.72696424499176593e-01 , 4.45474333595606120e-01 , 4.18414968704367896e-01 , 3.91599085601937957e-01 , 3.65106713419080631e-01 , 3.39016915802310692e-01 , 3.13407554956702750e-01 , 2.88355059274218006e-01 , 2.63934195241012137e-01 , 2.40217844304406181e-01 , 2.17276785365381614e-01 , 1.95179483545642324e-01 , 1.73991885859511558e-01 , 1.53777224400241136e-01 , 1.34595827627738335e-01 , 1.16504940320274905e-01 , 9.95585527263908726e-02 , 8.38072394247804386e-02 , 6.92980083689765242e-02 , 5.60741605588893355e-02 , 4.41751607393043935e-02 , 3.36365194664491537e-02 , 2.44896867760616282e-02 , 1.67619574140566614e-02 , 1.04763866452656437e-02 , 5.65171117488897506e-03 , 2.30223816078484449e-03 , 4.37217187368574701e-04 }, { 1.12187693612533150e-03 , 2.60826673735938984e-03 , 4.08908003391061665e-03 , 5.55788186616799473e-03 , 7.01013539537677800e-03 , 8.44147951172077513e-03 , 9.84763534974426001e-03 , 1.12244039453882182e-02 , 1.25676754954590613e-02 , 1.38734407010900965e-02 , 1.51378024213469995e-02 , 1.63569871831857824e-02 , 1.75273563911563096e-02 , 1.86454171622086572e-02 , 1.97078327377400581e-02 , 2.07114324354005543e-02 , 2.16532211081075995e-02 , 2.25303880806905776e-02 , 2.33403155368207514e-02 , 2.40805863308438742e-02 , 2.47489912010098387e-02 , 2.53435353624637053e-02 , 2.58624444602589126e-02 , 2.63041698645887154e-02 , 2.66673932924095802e-02 , 2.69510307416492879e-02 , 2.71542357262493199e-02 , 2.72764018023809417e-02 , 2.73171643782920137e-02 , 2.72764018023809417e-02 , 2.71542357262493199e-02 , 2.69510307416492879e-02 , 2.66673932924095802e-02 , 2.63041698645887154e-02 , 2.58624444602589126e-02 , 2.53435353624637053e-02 , 2.47489912010098387e-02 , 2.40805863308438742e-02 , 2.33403155368207514e-02 , 2.25303880806905776e-02 , 2.16532211081075995e-02 , 2.07114324354005543e-02 , 1.97078327377400581e-02 , 1.86454171622086572e-02 , 1.75273563911563096e-02 , 1.63569871831857824e-02 , 1.51378024213469995e-02 , 1.38734407010900965e-02 , 1.25676754954590613e-02 , 1.12244039453882182e-02 , 9.84763534974426001e-03 , 8.44147951172077513e-03 , 7.01013539537677800e-03 , 5.55788186616799473e-03 , 4.08908003391061665e-03 , 2.60826673735938984e-03 , 1.12187693612533150e-03 }, + { 9.99577600203693351e-01 , 9.97775738298645409e-01 , 9.94539504124221319e-01 , 9.89877507347175167e-01 , 9.83803101251462087e-01 , 9.76333778759434501e-01 , 9.67491068794129605e-01 , 9.57300464282176300e-01 , 9.45791346011015110e-01 , 9.32996897037403738e-01 , 9.18954006669686629e-01 , 9.03703163956544042e-01 , 8.87288340874826331e-01 , 8.69756865510021182e-01 , 8.51159285576954083e-01 , 8.31549222666062571e-01 , 8.10983217631539577e-01 , 7.89520567565112463e-01 , 7.67223154824423825e-01 , 7.44155268608359233e-01 , 7.20383419593419783e-01 , 6.95976148165376562e-01 , 6.71003826798997616e-01 , 6.45538457155554579e-01 , 6.19653462483076733e-01 , 5.93423475917880694e-01 , 5.66924125297733394e-01 , 5.40231815107071411e-01 , 5.13423506182971168e-01 , 4.86576493817028832e-01 , 4.59768184892928644e-01 , 4.33075874702266550e-01 , 4.06576524082119306e-01 , 3.80346537516923267e-01 , 3.54461542844445421e-01 , 3.28996173201002384e-01 , 3.04023851834623438e-01 , 2.79616580406580217e-01 , 2.55844731391640767e-01 , 2.32776845175576202e-01 , 2.10479432434887481e-01 , 1.89016782368460451e-01 , 1.68450777333937374e-01 , 1.48840714423045944e-01 , 1.30243134489978873e-01 , 1.12711659125173627e-01 , 9.62968360434559301e-02 , 8.10459933303133429e-02 , 6.70031029625962615e-02 , 5.42086539889849103e-02 , 4.26995357178237278e-02 , 3.25089312058703256e-02 , 2.36662212405654541e-02 , 1.61968987485379551e-02 , 1.01224926528248448e-02 , 5.46049587577868145e-03 , 2.22426170135454860e-03 , 4.22399796306696749e-04 }, { 1.08386162481372505e-03 , 2.51999080632512142e-03 , 3.95098692499933762e-03 , 5.37077676643938663e-03 , 6.77511855649440622e-03 , 8.15993711748548220e-03 , 9.52123273094670347e-03 , 1.08550780700731181e-02 , 1.21576263624819762e-02 , 1.34251215909909349e-02 , 1.46539090220802453e-02 , 1.58404456269046617e-02 , 1.69813102467080042e-02 , 1.80732134335436362e-02 , 1.91130069229292175e-02 , 2.00976927049338998e-02 , 2.10244316647910622e-02 , 2.18905517668201259e-02 , 2.26935557574099028e-02 , 2.34311283645131721e-02 , 2.41011429727088743e-02 , 2.47016677544811963e-02 , 2.52309712399765643e-02 , 2.56875273091428623e-02 , 2.60700195918349108e-02 , 2.63773452631854179e-02 , 2.66086182232895055e-02 , 2.67631716520291274e-02 , 2.68405599316674237e-02 , 2.68405599316674237e-02 , 2.67631716520291274e-02 , 2.66086182232895055e-02 , 2.63773452631854179e-02 , 2.60700195918349108e-02 , 2.56875273091428623e-02 , 2.52309712399765643e-02 , 2.47016677544811963e-02 , 2.41011429727088743e-02 , 2.34311283645131721e-02 , 2.26935557574099028e-02 , 2.18905517668201259e-02 , 2.10244316647910622e-02 , 2.00976927049338998e-02 , 1.91130069229292175e-02 , 1.80732134335436362e-02 , 1.69813102467080042e-02 , 1.58404456269046617e-02 , 1.46539090220802453e-02 , 1.34251215909909349e-02 , 1.21576263624819762e-02 , 1.08550780700731181e-02 , 9.52123273094670347e-03 , 8.15993711748548220e-03 , 6.77511855649440622e-03 , 5.37077676643938663e-03 , 3.95098692499933762e-03 , 2.51999080632512142e-03 , 1.08386162481372505e-03 }, + { 9.99591676954647346e-01 , 9.97849820191622938e-01 , 9.94721182566865481e-01 , 9.90213786978357824e-01 , 9.84340110840890792e-01 , 9.77116504688475551e-01 , 9.68563095176726896e-01 , 9.58703719394077614e-01 , 9.47565855871736029e-01 , 9.35180547146441166e-01 , 9.21582312908436063e-01 , 9.06809053644105800e-01 , 8.90901944931180467e-01 , 8.73905322639320081e-01 , 8.55866559338598898e-01 , 8.36835932252468551e-01 , 8.16866483119425002e-01 , 7.96013870352015096e-01 , 7.74336213904198156e-01 , 7.51893933278859006e-01 , 7.28749579126633296e-01 , 7.04967658905209515e-01 , 6.80614457084897428e-01 , 6.55757850401506803e-01 , 6.30467118671405813e-01 , 6.04812751696018225e-01 , 5.78866252793929004e-01 , 5.52699939508172089e-01 , 5.26386742044155032e-01 , 5.00000000000000000e-01 , 4.73613257955844968e-01 , 4.47300060491827911e-01 , 4.21133747206070996e-01 , 3.95187248303981720e-01 , 3.69532881328594132e-01 , 3.44242149598493141e-01 , 3.19385542915102572e-01 , 2.95032341094790540e-01 , 2.71250420873366649e-01 , 2.48106066721140994e-01 , 2.25663786095801816e-01 , 2.03986129647984932e-01 , 1.83133516880574942e-01 , 1.63164067747531394e-01 , 1.44133440661401130e-01 , 1.26094677360679891e-01 , 1.09098055068819547e-01 , 9.31909463558942136e-02 , 7.84176870915638952e-02 , 6.48194528535588621e-02 , 5.24341441282639570e-02 , 4.12962806059223586e-02 , 3.14369048232730694e-02 , 2.28834953115244731e-02 , 1.56598891591092360e-02 , 9.78621302164215529e-03 , 5.27881743313453420e-03 , 2.15017980837701756e-03 , 4.08323045352658139e-04 }, { 1.04774614227061175e-03 , 2.43611958413264247e-03 , 3.81976472674378734e-03 , 5.19294275049793103e-03 , 6.55168315317259525e-03 , 7.89217365654073383e-03 , 9.21067137680501441e-03 , 1.05034991442185931e-02 , 1.17670526968566818e-02 , 1.29978098656492493e-02 , 1.41923401002673998e-02 , 1.53473139180558410e-02 , 1.64595121355226373e-02 , 1.75258348182000534e-02 , 1.85433099094354618e-02 , 1.95091015080800061e-02 , 2.04205177693433521e-02 , 2.12750184055338180e-02 , 2.20702217651486884e-02 , 2.28039114702548833e-02 , 2.34740425934810079e-02 , 2.40787473573032193e-02 , 2.46163403396809921e-02 , 2.50853231714984505e-02 , 2.54843887126969572e-02 , 2.58124246954457397e-02 , 2.60685168241876972e-02 , 2.62519513239143701e-02 , 2.63622169295639648e-02 , 2.63990063109952114e-02 , 2.63622169295639648e-02 , 2.62519513239143701e-02 , 2.60685168241876972e-02 , 2.58124246954457397e-02 , 2.54843887126969572e-02 , 2.50853231714984505e-02 , 2.46163403396809921e-02 , 2.40787473573032193e-02 , 2.34740425934810079e-02 , 2.28039114702548833e-02 , 2.20702217651486884e-02 , 2.12750184055338180e-02 , 2.04205177693433521e-02 , 1.95091015080800061e-02 , 1.85433099094354618e-02 , 1.75258348182000534e-02 , 1.64595121355226373e-02 , 1.53473139180558410e-02 , 1.41923401002673998e-02 , 1.29978098656492493e-02 , 1.17670526968566818e-02 , 1.05034991442185931e-02 , 9.21067137680501441e-03 , 7.89217365654073383e-03 , 6.55168315317259525e-03 , 5.19294275049793103e-03 , 3.81976472674378734e-03 , 2.43611958413264247e-03 , 1.04774614227061175e-03 }, + { 9.99605061613717982e-01 , 9.97920262559419124e-01 , 9.94893947611110829e-01 , 9.90533600876299047e-01 , 9.84850894382526376e-01 , 9.77861127919998019e-01 , 9.69583138058211613e-01 , 9.60039238088813751e-01 , 9.49255155405022921e-01 , 9.37259961323449131e-01 , 9.24085992392964850e-01 , 9.09768763081072906e-01 , 8.94346869966131996e-01 , 8.77861887653292872e-01 , 8.60358256677865141e-01 , 8.41883163690677727e-01 , 8.22486414244738562e-01 , 8.02220298524255138e-01 , 7.81139450376972300e-01 , 7.59300700029284847e-01 , 7.36762920880853489e-01 , 7.13586870791539152e-01 , 6.89835028288398933e-01 , 6.65571424134224099e-01 , 6.40861468711630855e-01 , 6.15771775688014666e-01 , 5.90369982436712681e-01 , 5.64724567698472457e-01 , 5.38904666974768243e-01 , 5.12979886150623843e-01 , 4.87020113849376102e-01 , 4.61095333025231702e-01 , 4.35275432301527487e-01 , 4.09630017563287319e-01 , 3.84228224311985334e-01 , 3.59138531288369145e-01 , 3.34428575865775901e-01 , 3.10164971711601012e-01 , 2.86413129208460793e-01 , 2.63237079119146455e-01 , 2.40699299970715125e-01 , 2.18860549623027728e-01 , 1.97779701475744807e-01 , 1.77513585755261466e-01 , 1.58116836309322273e-01 , 1.39641743322134804e-01 , 1.22138112346707156e-01 , 1.05653130033867976e-01 , 9.02312369189271213e-02 , 7.59140076070351777e-02 , 6.27400386765508411e-02 , 5.07448445949770302e-02 , 3.99607619111862211e-02 , 3.04168619417883764e-02 , 2.21388720800019465e-02 , 1.51491056174736325e-02 , 9.46639912370090750e-03 , 5.10605238888914119e-03 , 2.07973744058091324e-03 , 3.94938386281988986e-04 }, { 1.01340598443687923e-03 , 2.35636496347678415e-03 , 3.69496558167272792e-03 , 5.02377859114399184e-03 , 6.33908323840797969e-03 , 7.63730929839239944e-03 , 8.91495050710386025e-03 , 1.01685603647286432e-02 , 1.13947584719989101e-02 , 1.25902388107606237e-02 , 1.37517783749623954e-02 , 1.48762457503944720e-02 , 1.59606095096481646e-02 , 1.70019463624732116e-02 , 1.79974490255422510e-02 , 1.89444337846217219e-02 , 1.98403477261904007e-02 , 2.06827756177923767e-02 , 2.14694464179678197e-02 , 2.21982393978935565e-02 , 2.28671898580572429e-02 , 2.34744944244561007e-02 , 2.40185159099855911e-02 , 2.44977877278784173e-02 , 2.49110178452750901e-02 , 2.52570922662546868e-02 , 2.55350780349278134e-02 , 2.57442257504904674e-02 , 2.58839715874550937e-02 , 2.59539388156103182e-02 , 2.59539388156103182e-02 , 2.58839715874550937e-02 , 2.57442257504904674e-02 , 2.55350780349278134e-02 , 2.52570922662546868e-02 , 2.49110178452750901e-02 , 2.44977877278784173e-02 , 2.40185159099855911e-02 , 2.34744944244561007e-02 , 2.28671898580572429e-02 , 2.21982393978935565e-02 , 2.14694464179678197e-02 , 2.06827756177923767e-02 , 1.98403477261904007e-02 , 1.89444337846217219e-02 , 1.79974490255422510e-02 , 1.70019463624732116e-02 , 1.59606095096481646e-02 , 1.48762457503944720e-02 , 1.37517783749623954e-02 , 1.25902388107606237e-02 , 1.13947584719989101e-02 , 1.01685603647286432e-02 , 8.91495050710386025e-03 , 7.63730929839239944e-03 , 6.33908323840797969e-03 , 5.02377859114399184e-03 , 3.69496558167272792e-03 , 2.35636496347678415e-03 , 1.01340598443687923e-03 }, + { 9.99617798815681691e-01 , 9.97987299907560077e-01 , 9.95058372616258513e-01 , 9.90838005642018516e-01 , 9.85337129416591462e-01 , 9.78570075956492036e-01 , 9.70554493340680557e-01 , 9.61311290691477582e-01 , 9.50864581237000572e-01 , 9.39241618607440487e-01 , 9.26472725423831744e-01 , 9.12591214054329969e-01 , 8.97633299641179772e-01 , 8.81638005586156126e-01 , 8.64647061724732602e-01 , 8.46704795447245528e-01 , 8.27858016047535394e-01 , 8.08155892598960812e-01 , 7.87649825675415305e-01 , 7.66393313251462649e-01 , 7.44441811131126063e-01 , 7.21852588269265794e-01 , 6.98684577362878256e-01 , 6.74998221102033447e-01 , 6.50855314481515346e-01 , 6.26318843584526719e-01 , 6.01452821259029213e-01 , 5.76322120115407621e-01 , 5.50992303281137019e-01 , 5.25529453353987153e-01 , 5.00000000000000000e-01 , 4.74470546646012847e-01 , 4.49007696718862981e-01 , 4.23677879884592323e-01 , 3.98547178740970731e-01 , 3.73681156415473226e-01 , 3.49144685518484654e-01 , 3.25001778897966553e-01 , 3.01315422637121688e-01 , 2.78147411730734206e-01 , 2.55558188868873937e-01 , 2.33606686748537351e-01 , 2.12350174324584695e-01 , 1.91844107401039132e-01 , 1.72141983952464550e-01 , 1.53295204552754416e-01 , 1.35352938275267454e-01 , 1.18361994413843902e-01 , 1.02366700358820173e-01 , 8.74087859456700311e-02 , 7.35272745761682833e-02 , 6.07583813925594851e-02 , 4.91354187629994138e-02 , 3.86887093085223691e-02 , 2.94455066593194252e-02 , 2.14299240435079537e-02 , 1.46628705834085452e-02 , 9.16199435798146014e-03 , 4.94162738374147488e-03 , 2.01270009243988265e-03 , 3.82201184318264138e-04 }, { 9.80726680835141426e-04 , 2.28046200300620859e-03 , 3.57617749587454481e-03 , 4.86273091517806701e-03 , 6.13663175390605220e-03 , 7.39453294246895758e-03 , 8.63314649380687166e-03 , 9.84923887305058990e-03 , 1.10396365741595223e-02 , 1.22012335937721015e-02 , 1.33309992620754443e-02 , 1.44259860440917008e-02 , 1.54833371841986978e-02 , 1.65002941379537062e-02 , 1.74742037582666758e-02 , 1.84025252115774078e-02 , 1.92828366035040846e-02 , 2.01128412954991245e-02 , 2.08903738954442468e-02 , 2.16134059062480476e-02 , 2.22800510175417445e-02 , 2.28885700265729804e-02 , 2.34373753754045337e-02 , 2.39250352925478027e-02 , 2.43502775282057639e-02 , 2.47119926733677941e-02 , 2.50092370540891257e-02 , 2.52412351933987006e-02 , 2.54073818344091699e-02 , 2.55072435193486324e-02 , 2.55405597203931106e-02 , 2.55072435193486324e-02 , 2.54073818344091699e-02 , 2.52412351933987006e-02 , 2.50092370540891257e-02 , 2.47119926733677941e-02 , 2.43502775282057639e-02 , 2.39250352925478027e-02 , 2.34373753754045337e-02 , 2.28885700265729804e-02 , 2.22800510175417445e-02 , 2.16134059062480476e-02 , 2.08903738954442468e-02 , 2.01128412954991245e-02 , 1.92828366035040846e-02 , 1.84025252115774078e-02 , 1.74742037582666758e-02 , 1.65002941379537062e-02 , 1.54833371841986978e-02 , 1.44259860440917008e-02 , 1.33309992620754443e-02 , 1.22012335937721015e-02 , 1.10396365741595223e-02 , 9.84923887305058990e-03 , 8.63314649380687166e-03 , 7.39453294246895758e-03 , 6.13663175390605220e-03 , 4.86273091517806701e-03 , 3.57617749587454481e-03 , 2.28046200300620859e-03 , 9.80726680835141426e-04 }, + { 9.99629929654388460e-01 , 9.98051148158133561e-01 , 9.95214985594645163e-01 , 9.91127974548618340e-01 , 9.85800361685825854e-01 , 9.79245586486963582e-01 , 9.71480200696164253e-01 , 9.62523817818101923e-01 , 9.52399061260546742e-01 , 9.41131506415948671e-01 , 9.28749615756035429e-01 , 9.15284666802002378e-01 , 9.00770673051988213e-01 , 8.85244298027709653e-01 , 8.68744762641578405e-01 , 8.51313746111148517e-01 , 8.32995280667739757e-01 , 8.13835640323442577e-01 , 7.93883223976543650e-01 , 7.73188433150125531e-01 , 7.51803544672377977e-01 , 7.29782578620056688e-01 , 7.07181161858563057e-01 , 6.84056387523282239e-01 , 6.60466670797096977e-01 , 6.36471601348363114e-01 , 6.12131792802082741e-01 , 5.87508729624507842e-01 , 5.62664611807948356e-01 , 5.37662197748117188e-01 , 5.12564645710910316e-01 , 4.87435354289089684e-01 , 4.62337802251882812e-01 , 4.37335388192051588e-01 , 4.12491270375492158e-01 , 3.87868207197917259e-01 , 3.63528398651636830e-01 , 3.39533329202903023e-01 , 3.15943612476717761e-01 , 2.92818838141436999e-01 , 2.70217421379943312e-01 , 2.48196455327622023e-01 , 2.26811566849874441e-01 , 2.06116776023456322e-01 , 1.86164359676557423e-01 , 1.67004719332260271e-01 , 1.48686253888851483e-01 , 1.31255237358421623e-01 , 1.14755701972290347e-01 , 9.92293269480118145e-02 , 8.47153331979975666e-02 , 7.12503842439645430e-02 , 5.88684935840513152e-02 , 4.76009387394532649e-02 , 3.74761821818981253e-02 , 2.85197993038357467e-02 , 2.07544135130364529e-02 , 1.41996383141740970e-02 , 8.87202545138167549e-03 , 4.78501440535482412e-03 , 1.94885184186643348e-03 , 3.70070345611485136e-04 }, { 9.49602839756845244e-04 , 2.20816672846545258e-03 , 3.46302095091548029e-03 , 4.70928971421019377e-03 , 5.94369505850525070e-03 , 7.16309591190325903e-03 , 8.36440589508865781e-03 , 9.54458832928659941e-03 , 1.07006611388349836e-02 , 1.18297036043413968e-02 , 1.29288634770123485e-02 , 1.39953640816573195e-02 , 1.50265112869949341e-02 , 1.60197002908123373e-02 , 1.69724221897052732e-02 , 1.78822703113840700e-02 , 1.87469462911400153e-02 , 1.95642658759815416e-02 , 2.03321644412087221e-02 , 2.10487022051925494e-02 , 2.17120691290237089e-02 , 2.23205894885622064e-02 , 2.28727261072850900e-02 , 2.33670842392077610e-02 , 2.38024150920506175e-02 , 2.41776189817388375e-02 , 2.44917481102589173e-02 , 2.47440089598496456e-02 , 2.49337642974761971e-02 , 2.50605347845216445e-02 , 2.51240001876281392e-02 , 2.51240001876281392e-02 , 2.50605347845216445e-02 , 2.49337642974761971e-02 , 2.47440089598496456e-02 , 2.44917481102589173e-02 , 2.41776189817388375e-02 , 2.38024150920506175e-02 , 2.33670842392077610e-02 , 2.28727261072850900e-02 , 2.23205894885622064e-02 , 2.17120691290237089e-02 , 2.10487022051925494e-02 , 2.03321644412087221e-02 , 1.95642658759815416e-02 , 1.87469462911400153e-02 , 1.78822703113840700e-02 , 1.69724221897052732e-02 , 1.60197002908123373e-02 , 1.50265112869949341e-02 , 1.39953640816573195e-02 , 1.29288634770123485e-02 , 1.18297036043413968e-02 , 1.07006611388349836e-02 , 9.54458832928659941e-03 , 8.36440589508865781e-03 , 7.16309591190325903e-03 , 5.94369505850525070e-03 , 4.70928971421019377e-03 , 3.46302095091548029e-03 , 2.20816672846545258e-03 , 9.49602839756845244e-04 }, + { 9.99641492014561872e-01 , 9.98112006388985007e-01 , 9.95364273446094683e-01 , 9.91404405296863578e-01 , 9.86242017348785027e-01 , 9.79889724879470903e-01 , 9.72363067020504901e-01 , 9.63680460310921583e-01 , 9.53863151389265806e-01 , 9.42935164253926761e-01 , 9.30923241182061822e-01 , 9.17856777159751447e-01 , 9.03767747886728312e-01 , 8.88690631495186123e-01 , 8.72662324158923752e-01 , 8.55722049792422945e-01 , 8.37911264057493055e-01 , 8.19273552910682712e-01 , 7.99854525938812566e-01 , 7.79701704743142487e-01 , 7.58864406645016643e-01 , 7.37393623997402159e-01 , 7.15341899397555769e-01 , 6.92763197106123885e-01 , 6.69712770987292205e-01 , 6.46247029293125719e-01 , 6.22423396622976632e-01 , 5.98300173395753365e-01 , 5.73936393178935966e-01 , 5.49391678223472679e-01 , 5.24726093558079754e-01 , 5.00000000000000000e-01 , 4.75273906441920191e-01 , 4.50608321776527376e-01 , 4.26063606821064034e-01 , 4.01699826604246635e-01 , 3.77576603377023312e-01 , 3.53752970706874281e-01 , 3.30287229012707795e-01 , 3.07236802893876060e-01 , 2.84658100602444175e-01 , 2.62606376002597786e-01 , 2.41135593354983385e-01 , 2.20298295256857485e-01 , 2.00145474061187378e-01 , 1.80726447089317316e-01 , 1.62088735942506945e-01 , 1.44277950207577083e-01 , 1.27337675841076303e-01 , 1.11309368504813835e-01 , 9.62322521132716185e-02 , 8.21432228402485809e-02 , 6.90767588179381359e-02 , 5.70648357460732877e-02 , 4.61368486107342213e-02 , 3.63195396890783964e-02 , 2.76369329794950991e-02 , 2.01102751205290350e-02 , 1.37579826512149884e-02 , 8.59559470313638226e-03 , 4.63572655390526688e-03 , 1.88799361101494581e-03 , 3.58507985438109790e-04 }, { 9.19937297788542101e-04 , 2.13925417343188099e-03 , 3.35514588298006788e-03 , 4.56298433816332803e-03 , 5.75968803844002092e-03 , 6.94230630805780548e-03 , 8.10793920516916962e-03 , 9.25373223008063572e-03 , 1.03768806290195446e-02 , 1.14746355024449662e-02 , 1.25443102766724934e-02 , 1.35832871795489672e-02 , 1.45890236041402634e-02 , 1.55590583111099093e-02 , 1.64910174418896709e-02 , 1.73826203226779379e-02 , 1.82316850427286445e-02 , 1.90361337921747774e-02 , 1.97939979457720482e-02 , 2.05034228798331997e-02 , 2.11626725104079108e-02 , 2.17701335415137961e-02 , 2.23243194129706980e-02 , 2.28238739381463052e-02 , 2.32675746226918487e-02 , 2.36543356561344578e-02 , 2.39832105689975657e-02 , 2.42533945489419242e-02 , 2.44642264102559945e-02 , 2.46151902118737810e-02 , 2.47059165199590910e-02 , 2.47361833119655108e-02 , 2.47059165199590910e-02 , 2.46151902118737810e-02 , 2.44642264102559945e-02 , 2.42533945489419242e-02 , 2.39832105689975657e-02 , 2.36543356561344578e-02 , 2.32675746226918487e-02 , 2.28238739381463052e-02 , 2.23243194129706980e-02 , 2.17701335415137961e-02 , 2.11626725104079108e-02 , 2.05034228798331997e-02 , 1.97939979457720482e-02 , 1.90361337921747774e-02 , 1.82316850427286445e-02 , 1.73826203226779379e-02 , 1.64910174418896709e-02 , 1.55590583111099093e-02 , 1.45890236041402634e-02 , 1.35832871795489672e-02 , 1.25443102766724934e-02 , 1.14746355024449662e-02 , 1.03768806290195446e-02 , 9.25373223008063572e-03 , 8.10793920516916962e-03 , 6.94230630805780548e-03 , 5.75968803844002092e-03 , 4.56298433816332803e-03 , 3.35514588298006788e-03 , 2.13925417343188099e-03 , 9.19937297788542101e-04 }, + { 9.99652520867886030e-01 , 9.98170058385977610e-01 , 9.95506685738372199e-01 , 9.91668126942312989e-01 , 9.86663413894955488e-01 , 9.80504399826026884e-01 , 9.73205687429201438e-01 , 9.64784586065969840e-01 , 9.55261068539251412e-01 , 9.44657722997557014e-01 , 9.32999699077046385e-01 , 9.20314648126290158e-01 , 9.06632657561398769e-01 , 8.91986179471670693e-01 , 8.76409953630265970e-01 , 8.59940925085805441e-01 , 8.42618156527116580e-01 , 8.24482735627328656e-01 , 8.05577677586196583e-01 , 7.85947823101317056e-01 , 7.65639732009947283e-01 , 7.44701572853526450e-01 , 7.23183008626732016e-01 , 7.01135078981995785e-01 , 6.78610079168834091e-01 , 6.55661435995105513e-01 , 6.32343581104383712e-01 , 6.08711821870003500e-01 , 5.84822210211996429e-01 , 5.60731409648060231e-01 , 5.36496560893899521e-01 , 5.12175146331712239e-01 , 4.87824853668287761e-01 , 4.63503439106100479e-01 , 4.39268590351939714e-01 , 4.15177789788003571e-01 , 3.91288178129996445e-01 , 3.67656418895616288e-01 , 3.44338564004894543e-01 , 3.21389920831165965e-01 , 2.98864921018004215e-01 , 2.76816991373267929e-01 , 2.55298427146473494e-01 , 2.34360267990052717e-01 , 2.14052176898682972e-01 , 1.94422322413803361e-01 , 1.75517264372671317e-01 , 1.57381843472883365e-01 , 1.40059074914194587e-01 , 1.23590046369734058e-01 , 1.08013820528329293e-01 , 9.33673424386012168e-02 , 7.96853518737098143e-02 , 6.70003009229535873e-02 , 5.53422770024429439e-02 , 4.47389314607485947e-02 , 3.52154139340302152e-02 , 2.67943125707985931e-02 , 1.94956001739731398e-02 , 1.33365861050445175e-02 , 8.33187305768702188e-03 , 4.49331426162783917e-03 , 1.82994161402236038e-03 , 3.47479132113930294e-04 }, { 8.91640360848216509e-04 , 2.07351663028123396e-03 , 3.25222898448918139e-03 , 4.42337991318197347e-03 , 5.58406973006556409e-03 , 6.73152394835932130e-03 , 7.86301523801235906e-03 , 8.97585788784867160e-03 , 1.00674115767651045e-02 , 1.11350869041916267e-02 , 1.21763512843554370e-02 , 1.31887348575273292e-02 , 1.41698363071297417e-02 , 1.51173285362012390e-02 , 1.60289641774257752e-02 , 1.69025809185708031e-02 , 1.77361066284411929e-02 , 1.85275642701200234e-02 , 1.92750765893078130e-02 , 1.99768705663601713e-02 , 2.06312816213117638e-02 , 2.12367575618267954e-02 , 2.17918622646617252e-02 , 2.22952790818782831e-02 , 2.27458139637090710e-02 , 2.31423982906572082e-02 , 2.34840914081050067e-02 , 2.37700828574151542e-02 , 2.39996942982291551e-02 , 2.41723811174014772e-02 , 2.42877337207517141e-02 , 2.43454785045698618e-02 , 2.43454785045698618e-02 , 2.42877337207517141e-02 , 2.41723811174014772e-02 , 2.39996942982291551e-02 , 2.37700828574151542e-02 , 2.34840914081050067e-02 , 2.31423982906572082e-02 , 2.27458139637090710e-02 , 2.22952790818782831e-02 , 2.17918622646617252e-02 , 2.12367575618267954e-02 , 2.06312816213117638e-02 , 1.99768705663601713e-02 , 1.92750765893078130e-02 , 1.85275642701200234e-02 , 1.77361066284411929e-02 , 1.69025809185708031e-02 , 1.60289641774257752e-02 , 1.51173285362012390e-02 , 1.41698363071297417e-02 , 1.31887348575273292e-02 , 1.21763512843554370e-02 , 1.11350869041916267e-02 , 1.00674115767651045e-02 , 8.97585788784867160e-03 , 7.86301523801235906e-03 , 6.73152394835932130e-03 , 5.58406973006556409e-03 , 4.42337991318197347e-03 , 3.25222898448918139e-03 , 2.07351663028123396e-03 , 8.91640360848216509e-04 }, + }; + + // Gauss-Legendre points and weights for n=1...64 inclusive + __constant__ __device__ const float fdata[128][64] = + { + { 5.00000000000000000e-01 }, { 1.00000000000000000e+00 }, + { 7.88675134594812866e-01 , 2.11324865405187107e-01 }, { 5.00000000000000000e-01 , 5.00000000000000000e-01 }, + { 8.87298334620741702e-01 , 5.00000000000000000e-01 , 1.12701665379258312e-01 }, { 2.77777777777777790e-01 , 4.44444444444444420e-01 , 2.77777777777777790e-01 }, + { 9.30568155797026231e-01 , 6.69990521792428129e-01 , 3.30009478207571871e-01 , 6.94318442029737137e-02 }, { 1.73927422568726925e-01 , 3.26072577431273047e-01 , 3.26072577431273047e-01 , 1.73927422568726925e-01 }, + { 9.53089922969332037e-01 , 7.69234655052841498e-01 , 5.00000000000000000e-01 , 2.30765344947158446e-01 , 4.69100770306680043e-02 }, { 1.18463442528094542e-01 , 2.39314335249683235e-01 , 2.84444444444444444e-01 , 2.39314335249683235e-01 , 1.18463442528094542e-01 }, + { 9.66234757101576025e-01 , 8.30604693233132241e-01 , 6.19309593041598494e-01 , 3.80690406958401562e-01 , 1.69395306766867731e-01 , 3.37652428984239888e-02 }, { 8.56622461895851783e-02 , 1.80380786524069303e-01 , 2.33956967286345519e-01 , 2.33956967286345519e-01 , 1.80380786524069303e-01 , 8.56622461895851783e-02 }, + { 9.74553956171379299e-01 , 8.70765592799697230e-01 , 7.02922575688698537e-01 , 5.00000000000000000e-01 , 2.97077424311301408e-01 , 1.29234407200302770e-01 , 2.54460438286207360e-02 }, { 6.47424830844348514e-02 , 1.39852695744638322e-01 , 1.90915025252559462e-01 , 2.08979591836734702e-01 , 1.90915025252559462e-01 , 1.39852695744638322e-01 , 6.47424830844348514e-02 }, + { 9.80144928248768088e-01 , 8.98333238706813364e-01 , 7.62766204958164495e-01 , 5.91717321247824946e-01 , 4.08282678752175110e-01 , 2.37233795041835505e-01 , 1.01666761293186636e-01 , 1.98550717512318842e-02 }, { 5.06142681451881293e-02 , 1.11190517226687241e-01 , 1.56853322938943635e-01 , 1.81341891689180995e-01 , 1.81341891689180995e-01 , 1.56853322938943635e-01 , 1.11190517226687241e-01 , 5.06142681451881293e-02 }, + { 9.84080119753813043e-01 , 9.18015553663317885e-01 , 8.06685716350295179e-01 , 6.62126711701904513e-01 , 5.00000000000000000e-01 , 3.37873288298095542e-01 , 1.93314283649704793e-01 , 8.19844463366821014e-02 , 1.59198802461869536e-02 }, { 4.06371941807872061e-02 , 9.03240803474286980e-02 , 1.30305348201467719e-01 , 1.56173538520001431e-01 , 1.65119677500629891e-01 , 1.56173538520001431e-01 , 1.30305348201467719e-01 , 9.03240803474286980e-02 , 4.06371941807872061e-02 }, + { 9.86953264258585872e-01 , 9.32531683344492213e-01 , 8.39704784149512218e-01 , 7.16697697064623607e-01 , 5.74437169490815580e-01 , 4.25562830509184420e-01 , 2.83302302935376393e-01 , 1.60295215850487782e-01 , 6.74683166555077457e-02 , 1.30467357414141404e-02 }, { 3.33356721543440690e-02 , 7.47256745752902934e-02 , 1.09543181257991021e-01 , 1.34633359654998175e-01 , 1.47762112357376435e-01 , 1.47762112357376435e-01 , 1.34633359654998175e-01 , 1.09543181257991021e-01 , 7.47256745752902934e-02 , 3.33356721543440690e-02 }, + { 9.89114329073028431e-01 , 9.43531299884047603e-01 , 8.65076002787024678e-01 , 7.59548064603405848e-01 , 6.34771577976172452e-01 , 5.00000000000000000e-01 , 3.65228422023827493e-01 , 2.40451935396594096e-01 , 1.34923997212975350e-01 , 5.64687001159523486e-02 , 1.08856709269715031e-02 }, { 2.78342835580868316e-02 , 6.27901847324523060e-02 , 9.31451054638671172e-02 , 1.16596882295995241e-01 , 1.31402272255123326e-01 , 1.36462543388950308e-01 , 1.31402272255123326e-01 , 1.16596882295995241e-01 , 9.31451054638671172e-02 , 6.27901847324523060e-02 , 2.78342835580868316e-02 }, + { 9.90780317123359566e-01 , 9.52058628185237454e-01 , 8.84951337097152346e-01 , 7.93658977143308686e-01 , 6.83915749499090064e-01 , 5.62616704255734401e-01 , 4.37383295744265543e-01 , 3.16084250500909880e-01 , 2.06341022856691286e-01 , 1.15048662902847654e-01 , 4.79413718147625734e-02 , 9.21968287664037475e-03 }, { 2.35876681932559139e-02 , 5.34696629976592133e-02 , 8.00391642716731105e-02 , 1.01583713361532962e-01 , 1.16746268269177403e-01 , 1.24573522906701387e-01 , 1.24573522906701387e-01 , 1.16746268269177403e-01 , 1.01583713361532962e-01 , 8.00391642716731105e-02 , 5.34696629976592133e-02 , 2.35876681932559139e-02 }, + { 9.92091527359294068e-01 , 9.58799199611488961e-01 , 9.00789045366654939e-01 , 8.21174669720170058e-01 , 7.24246375518223462e-01 , 6.15229157977567387e-01 , 5.00000000000000000e-01 , 3.84770842022432613e-01 , 2.75753624481776594e-01 , 1.78825330279829886e-01 , 9.92109546333450470e-02 , 4.12008003885110177e-02 , 7.90847264070592554e-03 }, { 2.02420023826579386e-02 , 4.60607499188642258e-02 , 6.94367551098936248e-02 , 8.90729903809728690e-02 , 1.03908023768444255e-01 , 1.13141590131448616e-01 , 1.16275776615436949e-01 , 1.13141590131448616e-01 , 1.03908023768444255e-01 , 8.90729903809728690e-02 , 6.94367551098936248e-02 , 4.60607499188642258e-02 , 2.02420023826579386e-02 }, + { 9.93141904348406213e-01 , 9.64217441831786704e-01 , 9.13600657534882510e-01 , 8.43646452405842684e-01 , 7.57624318179077050e-01 , 6.59556184463944928e-01 , 5.54027474353671834e-01 , 4.45972525646328166e-01 , 3.40443815536055128e-01 , 2.42375681820922950e-01 , 1.56353547594157261e-01 , 8.63993424651175040e-02 , 3.57825581682132410e-02 , 6.85809565159383079e-03 }, { 1.75597301658759301e-02 , 4.00790435798801040e-02 , 6.07592853439515926e-02 , 7.86015835790967732e-02 , 9.27691987389689110e-02 , 1.02599231860647802e-01 , 1.07631926731578897e-01 , 1.07631926731578897e-01 , 1.02599231860647802e-01 , 9.27691987389689110e-02 , 7.86015835790967732e-02 , 6.07592853439515926e-02 , 4.00790435798801040e-02 , 1.75597301658759301e-02 }, + { 9.93996259010242689e-01 , 9.68636696200352976e-01 , 9.24103291705213659e-01 , 8.62208865680085035e-01 , 7.85486086304269415e-01 , 6.97075673538781637e-01 , 6.00597046998717299e-01 , 5.00000000000000000e-01 , 3.99402953001282757e-01 , 3.02924326461218307e-01 , 2.14513913695730585e-01 , 1.37791134319914965e-01 , 7.58967082947863969e-02 , 3.13633037996470451e-02 , 6.00374098975728528e-03 }, { 1.53766209980586346e-02 , 3.51830237440540622e-02 , 5.35796102335859697e-02 , 6.97853389630771620e-02 , 8.31346029084969601e-02 , 9.30805000077811057e-02 , 9.92157426635557893e-02 , 1.01289120962780643e-01 , 9.92157426635557893e-02 , 9.30805000077811057e-02 , 8.31346029084969601e-02 , 6.97853389630771620e-02 , 5.35796102335859697e-02 , 3.51830237440540622e-02 , 1.53766209980586346e-02 }, + { 9.94700467495824969e-01 , 9.72287511536616300e-01 , 9.32815601193915822e-01 , 8.77702204177501555e-01 , 8.08938122201321885e-01 , 7.29008388828613629e-01 , 6.40801775389629458e-01 , 5.47506254918818769e-01 , 4.52493745081181287e-01 , 3.59198224610370542e-01 , 2.70991611171386315e-01 , 1.91061877798678115e-01 , 1.22297795822498487e-01 , 6.71843988060841224e-02 , 2.77124884633837103e-02 , 5.29953250417503335e-03 }, { 1.35762297058770465e-02 , 3.11267619693239468e-02 , 4.75792558412463928e-02 , 6.23144856277669384e-02 , 7.47979944082883680e-02 , 8.45782596975012679e-02 , 9.13017075224617919e-02 , 9.47253052275342511e-02 , 9.47253052275342511e-02 , 9.13017075224617919e-02 , 8.45782596975012679e-02 , 7.47979944082883680e-02 , 6.23144856277669384e-02 , 4.75792558412463928e-02 , 3.11267619693239468e-02 , 1.35762297058770465e-02 }, + { 9.95287737657208682e-01 , 9.75337760884383842e-01 , 9.40119576863492901e-01 , 8.90757001948400684e-01 , 8.28835579608345419e-01 , 7.56345268543238469e-01 , 6.75615881726938206e-01 , 5.89242090747923886e-01 , 5.00000000000000000e-01 , 4.10757909252076059e-01 , 3.24384118273061850e-01 , 2.43654731456761503e-01 , 1.71164420391654609e-01 , 1.09242998051599288e-01 , 5.98804231365070508e-02 , 2.46622391156161198e-02 , 4.71226234279133183e-03 }, { 1.20741514342739657e-02 , 2.77297646869936014e-02 , 4.25180741585895888e-02 , 5.59419235967019840e-02 , 6.75681842342627376e-02 , 7.70228805384051418e-02 , 8.40020510782250179e-02 , 8.82813526834963225e-02 , 8.97232351781032667e-02 , 8.82813526834963225e-02 , 8.40020510782250179e-02 , 7.70228805384051418e-02 , 6.75681842342627376e-02 , 5.59419235967019840e-02 , 4.25180741585895888e-02 , 2.77297646869936014e-02 , 1.20741514342739657e-02 }, + { 9.95782584210465505e-01 , 9.77911974785698912e-01 , 9.46301233248777907e-01 , 9.01852479486261571e-01 , 8.45843521530176612e-01 , 7.79885415536973770e-01 , 7.05875580731421315e-01 , 6.25943112845752769e-01 , 5.42387506520867646e-01 , 4.57612493479132354e-01 , 3.74056887154247231e-01 , 2.94124419268578685e-01 , 2.20114584463026230e-01 , 1.54156478469823388e-01 , 9.81475205137384427e-02 , 5.36987667512221281e-02 , 2.20880252143011227e-02 , 4.21741578953452670e-03 }, { 1.08080067632416559e-02 , 2.48572744474848985e-02 , 3.82128651274445258e-02 , 5.04710220531435841e-02 , 6.12776033557392297e-02 , 7.03214573353253269e-02 , 7.73423375631326210e-02 , 8.21382418729163649e-02 , 8.45711914815718002e-02 , 8.45711914815718002e-02 , 8.21382418729163649e-02 , 7.73423375631326210e-02 , 7.03214573353253269e-02 , 6.12776033557392297e-02 , 5.04710220531435841e-02 , 3.82128651274445258e-02 , 2.48572744474848985e-02 , 1.08080067632416559e-02 }, + { 9.96203421921792232e-01 , 9.80104076067415009e-01 , 9.51577951807409006e-01 , 9.11357328268571409e-01 , 8.60483088667614693e-01 , 8.00272652330840550e-01 , 7.32285370687980497e-01 , 6.58282049981814943e-01 , 5.80179322820112642e-01 , 5.00000000000000000e-01 , 4.19820677179887303e-01 , 3.41717950018185057e-01 , 2.67714629312019503e-01 , 1.99727347669159477e-01 , 1.39516911332385307e-01 , 8.86426717314285906e-02 , 4.84220481925910495e-02 , 1.98959239325849843e-02 , 3.79657807820779842e-03 }, { 9.73089411486323906e-03 , 2.24071133828497998e-02 , 3.45222713688206131e-02 , 4.57450108112249995e-02 , 5.57833227736669948e-02 , 6.43769812696681071e-02 , 7.13033510868033016e-02 , 7.63830210329298348e-02 , 7.94844216969771700e-02 , 8.05272249243918492e-02 , 7.94844216969771700e-02 , 7.63830210329298348e-02 , 7.13033510868033016e-02 , 6.43769812696681071e-02 , 5.57833227736669948e-02 , 4.57450108112249995e-02 , 3.45222713688206131e-02 , 2.24071133828497998e-02 , 9.73089411486323906e-03 }, + { 9.96564299592547442e-01 , 9.81985963638956849e-01 , 9.56117214125662973e-01 , 9.19558485911109447e-01 , 8.73165953230075398e-01 , 8.18026840363257568e-01 , 7.55433500975413508e-01 , 6.86853044357709774e-01 , 6.13892925570822534e-01 , 5.38263260566748669e-01 , 4.61736739433251331e-01 , 3.86107074429177466e-01 , 3.13146955642290226e-01 , 2.44566499024586437e-01 , 1.81973159636742488e-01 , 1.26834046769924602e-01 , 8.04415140888905811e-02 , 4.38827858743370477e-02 , 1.80140363610431058e-02 , 3.43570040745253772e-03 }, { 8.80700356957605894e-03 , 2.03007149001934693e-02 , 3.13360241670545339e-02 , 4.16383707883523774e-02 , 5.09650599086202138e-02 , 5.90972659807592060e-02 , 6.58443192245883185e-02 , 7.10480546591910206e-02 , 7.45864932363018707e-02 , 7.63766935653629186e-02 , 7.63766935653629186e-02 , 7.45864932363018707e-02 , 7.10480546591910206e-02 , 6.58443192245883185e-02 , 5.90972659807592060e-02 , 5.09650599086202138e-02 , 4.16383707883523774e-02 , 3.13360241670545339e-02 , 2.03007149001934693e-02 , 8.80700356957605894e-03 }, + { 9.96876085310194782e-01 , 9.83613419283153156e-01 , 9.60049667075200452e-01 , 9.26681682291658593e-01 , 8.84219981737838889e-01 , 8.33569402098706114e-01 , 7.75809417943609914e-01 , 7.12171060103719444e-01 , 6.44010658401200531e-01 , 5.72780927080447588e-01 , 5.00000000000000000e-01 , 4.27219072919552467e-01 , 3.55989341598799469e-01 , 2.87828939896280611e-01 , 2.24190582056390086e-01 , 1.66430597901293831e-01 , 1.15780018262161041e-01 , 7.33183177083413518e-02 , 3.99503329247995823e-02 , 1.63865807168468540e-02 , 3.12391468980525002e-03 }, { 8.00861412888716727e-03 , 1.84768948854262469e-02 , 2.85672127134286025e-02 , 3.80500568141896520e-02 , 4.67222117280169311e-02 , 5.43986495835741893e-02 , 6.09157080268642667e-02 , 6.61344693166687342e-02 , 6.99436973955365748e-02 , 7.22622019949850231e-02 , 7.30405668248452072e-02 , 7.22622019949850231e-02 , 6.99436973955365748e-02 , 6.61344693166687342e-02 , 6.09157080268642667e-02 , 5.43986495835741893e-02 , 4.67222117280169311e-02 , 3.80500568141896520e-02 , 2.85672127134286025e-02 , 1.84768948854262469e-02 , 8.00861412888716727e-03 }, + { 9.97147292741199620e-01 , 9.85030248917714402e-01 , 9.63478386093586936e-01 , 9.32906288860150035e-01 , 8.93908402989604056e-01 , 8.47243631593341373e-01 , 7.93820201753455801e-01 , 7.34677918993378531e-01 , 6.70967910446042093e-01 , 6.03930213344110678e-01 , 5.34869636659861092e-01 , 4.65130363340138908e-01 , 3.96069786655889378e-01 , 3.29032089553957907e-01 , 2.65322081006621469e-01 , 2.06179798246544199e-01 , 1.52756368406658599e-01 , 1.06091597010395916e-01 , 6.70937111398499375e-02 , 3.65216139064130016e-02 , 1.49697510822856365e-02 , 2.85270725880035388e-03 }, { 7.31399764913609994e-03 , 1.68874507924070758e-02 , 2.61466675763416430e-02 , 3.48982342122602443e-02 , 4.29708031085338643e-02 , 5.02070722214404824e-02 , 5.64661480402696078e-02 , 6.16261884052562089e-02 , 6.55867523935311780e-02 , 6.82707491730075861e-02 , 6.96259364278159903e-02 , 6.96259364278159903e-02 , 6.82707491730075861e-02 , 6.55867523935311780e-02 , 6.16261884052562089e-02 , 5.64661480402696078e-02 , 5.02070722214404824e-02 , 4.29708031085338643e-02 , 3.48982342122602443e-02 , 2.61466675763416430e-02 , 1.68874507924070758e-02 , 7.31399764913609994e-03 }, + { 9.97384667498776079e-01 , 9.86271235609057606e-01 , 9.66485543413008075e-01 , 9.38376179135220867e-01 , 9.02444200809419894e-01 , 8.59330681565975141e-01 , 8.09804937881823061e-01 , 7.54750738923003706e-01 , 6.95150519015145463e-01 , 6.32067840485172505e-01 , 5.66628412149233096e-01 , 5.00000000000000000e-01 , 4.33371587850766959e-01 , 3.67932159514827550e-01 , 3.04849480984854593e-01 , 2.45249261076996239e-01 , 1.90195062118176911e-01 , 1.40669318434024915e-01 , 9.75557991905800503e-02 , 6.16238208647791677e-02 , 3.35144565869919461e-02 , 1.37287643909423836e-02 , 2.61533250122393838e-03 }, { 6.70592974357088565e-03 , 1.54940029284897224e-02 , 2.40188358655423345e-02 , 3.21162107042629250e-02 , 3.96407058883594746e-02 , 4.64578830300175771e-02 , 5.24460457322707060e-02 , 5.74983201112056821e-02 , 6.15245421533647668e-02 , 6.44528610940410807e-02 , 6.62310197023483066e-02 , 6.68272860930530926e-02 , 6.62310197023483066e-02 , 6.44528610940410807e-02 , 6.15245421533647668e-02 , 5.74983201112056821e-02 , 5.24460457322707060e-02 , 4.64578830300175771e-02 , 3.96407058883594746e-02 , 3.21162107042629250e-02 , 2.40188358655423345e-02 , 1.54940029284897224e-02 , 6.70592974357088565e-03 }, + { 9.97593609998510655e-01 , 9.87364277985654737e-01 , 9.69137276001366343e-01 , 9.43207763502200480e-01 , 9.10000992986951474e-01 , 8.70062095789277179e-01 , 8.24046825968487773e-01 , 7.72710735694419726e-01 , 7.16896753813022536e-01 , 6.57521339848081698e-01 , 5.95559433736808197e-01 , 5.32028446431302759e-01 , 4.67971553568697185e-01 , 4.04440566263191859e-01 , 3.42478660151918302e-01 , 2.83103246186977409e-01 , 2.27289264305580219e-01 , 1.75953174031512227e-01 , 1.29937904210722821e-01 , 8.99990070130485403e-02 , 5.67922364977994851e-02 , 3.08627239986336219e-02 , 1.26357220143452510e-02 , 2.40639000148931996e-03 }, { 6.17061489999360009e-03 , 1.42656943144668317e-02 , 2.21387194087099039e-02 , 2.96492924577183917e-02 , 3.66732407055401499e-02 , 4.30950807659766372e-02 , 4.88093260520569422e-02 , 5.37221350579828172e-02 , 5.77528340268627996e-02 , 6.08352364639016957e-02 , 6.29187281734141513e-02 , 6.39690976733760797e-02 , 6.39690976733760797e-02 , 6.29187281734141513e-02 , 6.08352364639016957e-02 , 5.77528340268627996e-02 , 5.37221350579828172e-02 , 4.88093260520569422e-02 , 4.30950807659766372e-02 , 3.66732407055401499e-02 , 2.96492924577183917e-02 , 2.21387194087099039e-02 , 1.42656943144668317e-02 , 6.17061489999360009e-03 }, + { 9.97778484895249007e-01 , 9.88331960729758707e-01 , 9.71487285614487162e-01 , 9.47495998939137718e-01 , 9.16721314380417041e-01 , 8.79629631518678790e-01 , 8.36783184236734146e-01 , 7.88831465120611419e-01 , 7.36501365722857515e-01 , 6.80586152904693931e-01 , 6.21933441860494263e-01 , 5.61432346305355212e-01 , 5.00000000000000000e-01 , 4.38567653694644788e-01 , 3.78066558139505793e-01 , 3.19413847095306069e-01 , 2.63498634277142540e-01 , 2.11168534879388525e-01 , 1.63216815763265827e-01 , 1.20370368481321183e-01 , 8.32786856195830011e-02 , 5.25040010608623167e-02 , 2.85127143855128315e-02 , 1.16680392702412442e-02 , 2.22151510475095083e-03 }, { 5.69689925051314414e-03 , 1.31774933075160684e-02 , 2.04695783506531545e-02 , 2.74523479879175969e-02 , 3.40191669061784552e-02 , 4.00703501675005111e-02 , 4.55141309914818271e-02 , 5.02679745335253211e-02 , 5.42598122371318256e-02 , 5.74291295728558207e-02 , 5.97278817678923851e-02 , 6.11212214951550176e-02 , 6.15880268633577227e-02 , 6.11212214951550176e-02 , 5.97278817678923851e-02 , 5.74291295728558207e-02 , 5.42598122371318256e-02 , 5.02679745335253211e-02 , 4.55141309914818271e-02 , 4.00703501675005111e-02 , 3.40191669061784552e-02 , 2.74523479879175969e-02 , 2.04695783506531545e-02 , 1.31774933075160684e-02 , 5.69689925051314414e-03 }, + { 9.97942850572808515e-01 , 9.89192722978235461e-01 , 9.73579533330857116e-01 , 9.51318930992153478e-01 , 9.22722971394248970e-01 , 8.88192974410339398e-01 , 8.48213630209978642e-01 , 8.03346146508808978e-01 , 7.54220357412252795e-01 , 7.01525877561743116e-01 , 6.46002419742978451e-01 , 5.88429410178445078e-01 , 5.29615046714656645e-01 , 4.70384953285343410e-01 , 4.11570589821554922e-01 , 3.53997580257021549e-01 , 2.98474122438256828e-01 , 2.45779642587747149e-01 , 1.96653853491190966e-01 , 1.51786369790021358e-01 , 1.11807025589660575e-01 , 7.72770286057509886e-02 , 4.86810690078464600e-02 , 2.64204666691428766e-02 , 1.08072770217645039e-02 , 2.05714942719153549e-03 }, { 5.27568630867150321e-03 , 1.22089255463159550e-02 , 1.89811916471813828e-02 , 2.54879126485739044e-02 , 3.16370231647874200e-02 , 3.73420748828298746e-02 , 4.25229471567426173e-02 , 4.71069001779570729e-02 , 5.10295805472127106e-02 , 5.42359202642882926e-02 , 5.66809082731598302e-02 , 5.83302217426482916e-02 , 5.91607076396311396e-02 , 5.91607076396311396e-02 , 5.83302217426482916e-02 , 5.66809082731598302e-02 , 5.42359202642882926e-02 , 5.10295805472127106e-02 , 4.71069001779570729e-02 , 4.25229471567426173e-02 , 3.73420748828298746e-02 , 3.16370231647874200e-02 , 2.54879126485739044e-02 , 1.89811916471813828e-02 , 1.22089255463159550e-02 , 5.27568630867150321e-03 }, + { 9.98089631444494252e-01 , 9.89961737980750600e-01 , 9.75450278907352475e-01 , 9.54741160338745565e-01 , 9.28103954009147247e-01 , 8.95885819535254146e-01 , 8.58506736869711795e-01 , 8.16453985973247587e-01 , 7.70275782289728483e-01 , 7.20574125875013460e-01 , 6.67996951819254448e-01 , 6.13229682719768410e-01 , 5.56986292804764971e-01 , 5.00000000000000000e-01 , 4.43013707195235029e-01 , 3.86770317280231590e-01 , 3.32003048180745552e-01 , 2.79425874124986540e-01 , 2.29724217710271544e-01 , 1.83546014026752413e-01 , 1.41493263130288149e-01 , 1.04114180464745881e-01 , 7.18960459908527527e-02 , 4.52588396612544491e-02 , 2.45497210926474974e-02 , 1.00382620192493877e-02 , 1.91036855550571648e-03 }, { 4.89949802564718009e-03 , 1.13431157980903117e-02 , 1.76485268787098561e-02 , 2.37247062603075307e-02 , 2.94917684299167981e-02 , 3.48744118831227981e-02 , 3.98024338865288832e-02 , 4.42115792718784720e-02 , 4.80443636850142533e-02 , 5.12508189088728972e-02 , 5.37891428942665895e-02 , 5.56262441784225944e-02 , 5.67381730544825741e-02 , 5.71104336894784903e-02 , 5.67381730544825741e-02 , 5.56262441784225944e-02 , 5.37891428942665895e-02 , 5.12508189088728972e-02 , 4.80443636850142533e-02 , 4.42115792718784720e-02 , 3.98024338865288832e-02 , 3.48744118831227981e-02 , 2.94917684299167981e-02 , 2.37247062603075307e-02 , 1.76485268787098561e-02 , 1.13431157980903117e-02 , 4.89949802564718009e-03 }, + { 9.98221248786977267e-01 , 9.90651582685436405e-01 , 9.77129640314469139e-01 , 9.57816513196066088e-01 , 9.32946261287197487e-01 , 9.02820685458589622e-01 , 8.67805439006815837e-01 , 8.28325547019432507e-01 , 7.84860235905700865e-01 , 7.37937112477559110e-01 , 6.88125758044539348e-01 , 6.36030813817589080e-01 , 5.82284641066690423e-01 , 5.27539644942017105e-01 , 4.72460355057982839e-01 , 4.17715358933309633e-01 , 3.63969186182410975e-01 , 3.11874241955460652e-01 , 2.62062887522440890e-01 , 2.15139764094299135e-01 , 1.71674452980567521e-01 , 1.32194560993184107e-01 , 9.71793145414104192e-02 , 6.70537387128024714e-02 , 4.21834868039339603e-02 , 2.28703596855309027e-02 , 9.34841731456362290e-03 , 1.77875121302277506e-03 }, { 4.56214129654725856e-03 , 1.05660562963856303e-02 , 1.64507138911521890e-02 , 2.21364673795021137e-02 , 2.75536728378583742e-02 , 3.26364619834998010e-02 , 3.73231071172843917e-02 , 4.15567086144506062e-02 , 4.52858721965164190e-02 , 4.84653289989649544e-02 , 5.10564837890303824e-02 , 5.30278829614232103e-02 , 5.43555961291470671e-02 , 5.50235065082375976e-02 , 5.50235065082375976e-02 , 5.43555961291470671e-02 , 5.30278829614232103e-02 , 5.10564837890303824e-02 , 4.84653289989649544e-02 , 4.52858721965164190e-02 , 4.15567086144506062e-02 , 3.73231071172843917e-02 , 3.26364619834998010e-02 , 2.75536728378583742e-02 , 2.21364673795021137e-02 , 1.64507138911521890e-02 , 1.05660562963856303e-02 , 4.56214129654725856e-03 }, + { 9.98339721130298230e-01 , 9.91272752630706577e-01 , 9.78642797889043847e-01 , 9.60590116476529365e-01 , 9.37318902460051340e-01 , 9.09092743807626169e-01 , 8.76231425867238567e-01 , 8.39107268801343231e-01 , 7.98140898569113855e-01 , 7.53796477562113765e-01 , 7.06576444087004374e-01 , 6.57015818933819995e-01 , 6.05676143083000551e-01 , 5.53139115066339615e-01 , 5.00000000000000000e-01 , 4.46860884933660385e-01 , 3.94323856916999449e-01 , 3.42984181066180005e-01 , 2.93423555912995682e-01 , 2.46203522437886180e-01 , 2.01859101430886090e-01 , 1.60892731198656741e-01 , 1.23768574132761433e-01 , 9.09072561923737754e-02 , 6.26810975399486048e-02 , 3.94098835234706069e-02 , 2.13572021109561354e-02 , 8.72724736929341230e-03 , 1.66027886970170698e-03 }, { 4.25845193937320499e-03 , 9.86604252806135354e-03 , 1.53702461010468104e-02 , 2.07010312593414181e-02 , 2.57974134512489600e-02 , 3.06015453285395679e-02 , 3.50589666275256395e-02 , 3.91191635678818928e-02 , 4.27361286830862663e-02 , 4.58688785696293802e-02 , 4.84819170472043023e-02 , 5.05456368799574798e-02 , 5.20366550388646903e-02 , 5.29380775486604713e-02 , 5.32396908591571197e-02 , 5.29380775486604713e-02 , 5.20366550388646903e-02 , 5.05456368799574798e-02 , 4.84819170472043023e-02 , 4.58688785696293802e-02 , 4.27361286830862663e-02 , 3.91191635678818928e-02 , 3.50589666275256395e-02 , 3.06015453285395679e-02 , 2.57974134512489600e-02 , 2.07010312593414181e-02 , 1.53702461010468104e-02 , 9.86604252806135354e-03 , 4.25845193937320499e-03 }, + { 9.98446742037324753e-01 , 9.91834061639873643e-01 , 9.80010932484153718e-01 , 9.63100023714637210e-01 , 9.41280267896026368e-01 , 9.14782881191384178e-01 , 8.83888716052413148e-01 , 8.48925247396657867e-01 , 8.10263091494621390e-01 , 7.68312074071009987e-01 , 7.23516884769044522e-01 , 6.76352362765439086e-01 , 6.27318463083944899e-01 , 5.76934956804291743e-01 , 5.25735921277658891e-01 , 4.74264078722341165e-01 , 4.23065043195708201e-01 , 3.72681536916055101e-01 , 3.23647637234560914e-01 , 2.76483115230955423e-01 , 2.31687925928990041e-01 , 1.89736908505378554e-01 , 1.51074752603342105e-01 , 1.16111283947586907e-01 , 8.52171188086157938e-02 , 5.87197321039736597e-02 , 3.68999762853628385e-02 , 1.99890675158462434e-02 , 8.16593836012639504e-03 , 1.55325796267522984e-03 }, { 3.98409624808330250e-03 , 9.23323415554547916e-03 , 1.43923539416616845e-02 , 1.93995962848135250e-02 , 2.42013364152970263e-02 , 2.87465781088095326e-02 , 3.29871149410902453e-02 , 3.68779873688526022e-02 , 4.03779476147101066e-02 , 4.34498936005414879e-02 , 4.60612611188930612e-02 , 4.81843685873221267e-02 , 4.97967102933976336e-02 , 5.08811948742027495e-02 , 5.14263264467794204e-02 , 5.14263264467794204e-02 , 5.08811948742027495e-02 , 4.97967102933976336e-02 , 4.81843685873221267e-02 , 4.60612611188930612e-02 , 4.34498936005414879e-02 , 4.03779476147101066e-02 , 3.68779873688526022e-02 , 3.29871149410902453e-02 , 2.87465781088095326e-02 , 2.42013364152970263e-02 , 1.93995962848135250e-02 , 1.43923539416616845e-02 , 9.23323415554547916e-03 , 3.98409624808330250e-03 }, + { 9.98543740909738520e-01 , 9.92342954832576174e-01 , 9.81251962546474843e-01 , 9.65378498948324060e-01 , 9.44880014974135540e-01 , 9.19960160073133637e-01 , 8.90866574208312501e-01 , 8.57888392293426616e-01 , 8.21353361462130227e-01 , 7.81624580703574656e-01 , 7.39096891022451241e-01 , 6.94192950804116471e-01 , 6.47359034990850790e-01 , 5.99060599667785354e-01 , 5.49777656076170795e-01 , 5.00000000000000000e-01 , 4.50222343923829260e-01 , 4.00939400332214702e-01 , 3.52640965009149210e-01 , 3.05807049195883529e-01 , 2.60903108977548759e-01 , 2.18375419296425372e-01 , 1.78646638537869829e-01 , 1.42111607706573356e-01 , 1.09133425791687527e-01 , 8.00398399268663352e-02 , 5.51199850258644805e-02 , 3.46215010516759195e-02 , 1.87480374535251675e-02 , 7.65704516742375836e-03 , 1.45625909026146291e-03 }, { 3.73541578962438775e-03 , 8.65931039515529036e-03 , 1.35045095924897114e-02 , 1.82161369561927335e-02 , 2.27468537636005518e-02 , 2.70515412124584277e-02 , 3.10873932805142139e-02 , 3.48142916177051828e-02 , 3.81951932993883081e-02 , 4.11964958807946313e-02 , 4.37883703042389397e-02 , 4.59450569468207379e-02 , 4.76451214561597544e-02 , 4.88716676931643598e-02 , 4.96125056133361539e-02 , 4.98602723967132289e-02 , 4.96125056133361539e-02 , 4.88716676931643598e-02 , 4.76451214561597544e-02 , 4.59450569468207379e-02 , 4.37883703042389397e-02 , 4.11964958807946313e-02 , 3.81951932993883081e-02 , 3.48142916177051828e-02 , 3.10873932805142139e-02 , 2.70515412124584277e-02 , 2.27468537636005518e-02 , 1.82161369561927335e-02 , 1.35045095924897114e-02 , 8.65931039515529036e-03 , 3.73541578962438775e-03 }, + { 9.98631930924740785e-01 , 9.92805755772634191e-01 , 9.82381127793753195e-01 , 9.67453037968869833e-01 , 9.48160577883026101e-01 , 9.24683806866284930e-01 , 8.97241897983971137e-01 , 8.66091059370144856e-01 , 8.31522133465107616e-01 , 7.93857878620381152e-01 , 7.53449954466114735e-01 , 7.10675638065317639e-01 , 6.65934301141063778e-01 , 6.19643681126068491e-01 , 5.72235980791398258e-01 , 5.24153832843869183e-01 , 4.75846167156130817e-01 , 4.27764019208601742e-01 , 3.80356318873931454e-01 , 3.34065698858936166e-01 , 2.89324361934682306e-01 , 2.46550045533885293e-01 , 2.06142121379618848e-01 , 1.68477866534892384e-01 , 1.33908940629855144e-01 , 1.02758102016028793e-01 , 7.53161931337150148e-02 , 5.18394221169739405e-02 , 3.25469620311301527e-02 , 1.76188722062467842e-02 , 7.19424422736583257e-03 , 1.36806907525921810e-03 }, { 3.50930500473504818e-03 , 8.13719736545283519e-03 , 1.26960326546310294e-02 , 1.71369314565107157e-02 , 2.14179490111133415e-02 , 2.54990296311880874e-02 , 2.93420467392677721e-02 , 3.29111113881809247e-02 , 3.61728970544242523e-02 , 3.90969478935351555e-02 , 4.16559621134733743e-02 , 4.38260465022019055e-02 , 4.55869393478819385e-02 , 4.69221995404022832e-02 , 4.78193600396374305e-02 , 4.82700442573638991e-02 , 4.82700442573638991e-02 , 4.78193600396374305e-02 , 4.69221995404022832e-02 , 4.55869393478819385e-02 , 4.38260465022019055e-02 , 4.16559621134733743e-02 , 3.90969478935351555e-02 , 3.61728970544242523e-02 , 3.29111113881809247e-02 , 2.93420467392677721e-02 , 2.54990296311880874e-02 , 2.14179490111133415e-02 , 1.71369314565107157e-02 , 1.26960326546310294e-02 , 8.13719736545283519e-03 , 3.50930500473504818e-03 }, + { 9.98712347123227540e-01 , 9.93227863115321297e-01 , 9.83411454844996369e-01 , 9.69347186305584141e-01 , 9.51158383871716806e-01 , 9.29004826338251988e-01 , 9.03081178137083329e-01 , 8.73615248224781094e-01 , 8.40865979984871448e-01 , 8.05121172918189520e-01 , 7.66694952393173867e-01 , 7.25925008636225333e-01 , 6.83169628874036650e-01 , 6.38804548576248465e-01 , 5.93219649413995742e-01 , 5.46815532927366732e-01 , 5.00000000000000000e-01 , 4.53184467072633324e-01 , 4.06780350586004202e-01 , 3.61195451423751479e-01 , 3.16830371125963350e-01 , 2.74074991363774667e-01 , 2.33305047606826188e-01 , 1.94878827081810480e-01 , 1.59134020015128608e-01 , 1.26384751775218906e-01 , 9.69188218629166987e-02 , 7.09951736617479706e-02 , 4.88416161282832079e-02 , 3.06528136944158244e-02 , 1.65885451550036173e-02 , 6.77213688467875625e-03 , 1.28765287677239126e-03 }, { 3.30311392379368900e-03 , 7.66085075646733785e-03 , 1.19577740508747393e-02 , 1.61501793161644772e-02 , 2.02007706658347969e-02 , 2.40738714093558480e-02 , 2.77354233158317795e-02 , 3.11532412651587404e-02 , 3.42972864093283591e-02 , 3.71399274219770745e-02 , 3.96561823974433680e-02 , 4.18239380335193520e-02 , 4.36241438094221654e-02 , 4.50409793303192876e-02 , 4.60619933216584246e-02 , 4.66782130327980591e-02 , 4.68842230801049947e-02 , 4.66782130327980591e-02 , 4.60619933216584246e-02 , 4.50409793303192876e-02 , 4.36241438094221654e-02 , 4.18239380335193520e-02 , 3.96561823974433680e-02 , 3.71399274219770745e-02 , 3.42972864093283591e-02 , 3.11532412651587404e-02 , 2.77354233158317795e-02 , 2.40738714093558480e-02 , 2.02007706658347969e-02 , 1.61501793161644772e-02 , 1.19577740508747393e-02 , 7.66085075646733785e-03 , 3.30311392379368900e-03 }, + { 9.98785876895420976e-01 , 9.93613908203154761e-01 , 9.84354131266672150e-01 , 9.71081198702553494e-01 , 9.53904838859162219e-01 , 9.32967319167282261e-01 , 9.08442113950466812e-01 , 8.80532438314936439e-01 , 8.49469556608131393e-01 , 8.15510863540264253e-01 , 7.78937750334873336e-01 , 7.40053272595163514e-01 , 6.99179638879322995e-01 , 6.56655540669731641e-01 , 6.12833345808224683e-01 , 5.68076178629591477e-01 , 5.22754910976551246e-01 , 4.77245089023448754e-01 , 4.31923821370408523e-01 , 3.87166654191775261e-01 , 3.43344459330268359e-01 , 3.00820361120677005e-01 , 2.59946727404836486e-01 , 2.21062249665126664e-01 , 1.84489136459735720e-01 , 1.50530443391868551e-01 , 1.19467561685063492e-01 , 9.15578860495331603e-02 , 6.70326808327177670e-02 , 4.60951611408377676e-02 , 2.89188012974464538e-02 , 1.56458687333278605e-02 , 6.38609179684525730e-03 , 1.21412310457904042e-03 }, { 3.11457027795434237e-03 , 7.22508137429751784e-03 , 1.12818609927474844e-02 , 1.52456903192230656e-02 , 1.90832968981937585e-02 , 2.27628057616766355e-02 , 2.62537072863390543e-02 , 2.95270679137622470e-02 , 3.25557607770382076e-02 , 3.53146879071278633e-02 , 3.77809873300159679e-02 , 3.99342221698859232e-02 , 4.17565498499228305e-02 , 4.32328698735178762e-02 , 4.43509489178469316e-02 , 4.51015221853203613e-02 , 4.54783701651299346e-02 , 4.54783701651299346e-02 , 4.51015221853203613e-02 , 4.43509489178469316e-02 , 4.32328698735178762e-02 , 4.17565498499228305e-02 , 3.99342221698859232e-02 , 3.77809873300159679e-02 , 3.53146879071278633e-02 , 3.25557607770382076e-02 , 2.95270679137622470e-02 , 2.62537072863390543e-02 , 2.27628057616766355e-02 , 1.90832968981937585e-02 , 1.52456903192230656e-02 , 1.12818609927474844e-02 , 7.22508137429751784e-03 , 3.11457027795434237e-03 }, + { 9.98853284549800158e-01 , 9.93967882221925780e-01 , 9.85218808019614922e-01 , 9.72672574103913612e-01 , 9.56427130679658788e-01 , 9.36609562512611182e-01 , 9.13374949546112758e-01 , 8.86905126143456290e-01 , 8.57407250778314367e-01 , 8.25112182332945143e-01 , 7.90272672374882301e-01 , 7.53161386620744278e-01 , 7.14068770758907068e-01 , 6.73300777215406931e-01 , 6.31176470604647988e-01 , 5.88025530582994782e-01 , 5.44185671637829604e-01 , 5.00000000000000000e-01 , 4.55814328362170396e-01 , 4.11974469417005218e-01 , 3.68823529395351957e-01 , 3.26699222784593013e-01 , 2.85931229241092877e-01 , 2.46838613379255695e-01 , 2.09727327625117754e-01 , 1.74887817667054801e-01 , 1.42592749221685605e-01 , 1.13094873856543723e-01 , 8.66250504538872979e-02 , 6.33904374873888316e-02 , 4.35728693203411913e-02 , 2.73274258960863360e-02 , 1.47811919803850830e-02 , 6.03211777807425090e-03 , 1.14671545019985133e-03 }, { 2.94171671022154264e-03 , 6.82541417418074635e-03 , 1.06614899557417910e-02 , 1.44146300544471268e-02 , 1.80550579317316912e-02 , 2.15542111630851081e-02 , 2.48846852006767635e-02 , 2.80204081061850643e-02 , 3.09368359830400931e-02 , 3.36111426345434491e-02 , 3.60223973862800334e-02 , 3.81517285777210266e-02 , 3.99824711211621345e-02 , 4.15002968644282919e-02 , 4.26933266960495619e-02 , 4.35522234985917661e-02 , 4.40702652151377314e-02 , 4.42433974535521440e-02 , 4.40702652151377314e-02 , 4.35522234985917661e-02 , 4.26933266960495619e-02 , 4.15002968644282919e-02 , 3.99824711211621345e-02 , 3.81517285777210266e-02 , 3.60223973862800334e-02 , 3.36111426345434491e-02 , 3.09368359830400931e-02 , 2.80204081061850643e-02 , 2.48846852006767635e-02 , 2.15542111630851081e-02 , 1.80550579317316912e-02 , 1.44146300544471268e-02 , 1.06614899557417910e-02 , 6.82541417418074635e-03 , 2.94171671022154264e-03 }, + { 9.98915231242042956e-01 , 9.94293239451106148e-01 , 9.86013845524848942e-01 , 9.74136492199753734e-01 , 9.58748887257829585e-01 , 9.39964900445198537e-01 , 9.17923583496237594e-01 , 8.92788115066103227e-01 , 8.64744585796778265e-01 , 8.34000618292760509e-01 , 8.00783829067990283e-01 , 7.65340142963122583e-01 , 7.27931972216710133e-01 , 6.88836273559844559e-01 , 6.48342497672014129e-01 , 6.06750446158432766e-01 , 5.64368051904692414e-01 , 5.21509099236854290e-01 , 4.78490900763145710e-01 , 4.35631948095307586e-01 , 3.93249553841567234e-01 , 3.51657502327985871e-01 , 3.11163726440155386e-01 , 2.72068027783289867e-01 , 2.34659857036877417e-01 , 1.99216170932009717e-01 , 1.65999381707239463e-01 , 1.35255414203221708e-01 , 1.07211884933896745e-01 , 8.20764165037623505e-02 , 6.00350995548014355e-02 , 4.12511127421704704e-02 , 2.58635078002462278e-02 , 1.39861544751510251e-02 , 5.70676054889388083e-03 , 1.08476875795708192e-03 }, { 2.78285983212252274e-03 , 6.45797364203278684e-03 , 1.00907576488677361e-02 , 1.36493107492843893e-02 , 1.71069053851536160e-02 , 2.04378754618224460e-02 , 2.36175417451329889e-02 , 2.66223569888799604e-02 , 2.94300721226624096e-02 , 3.20198986775077424e-02 , 3.43726619178682247e-02 , 3.64709425028265297e-02 , 3.82992053229353341e-02 , 3.98439144560358005e-02 , 4.10936333521698532e-02 , 4.20391094898309656e-02 , 4.26733428696693118e-02 , 4.29916378351973757e-02 , 4.29916378351973757e-02 , 4.26733428696693118e-02 , 4.20391094898309656e-02 , 4.10936333521698532e-02 , 3.98439144560358005e-02 , 3.82992053229353341e-02 , 3.64709425028265297e-02 , 3.43726619178682247e-02 , 3.20198986775077424e-02 , 2.94300721226624096e-02 , 2.66223569888799604e-02 , 2.36175417451329889e-02 , 2.04378754618224460e-02 , 1.71069053851536160e-02 , 1.36493107492843893e-02 , 1.00907576488677361e-02 , 6.45797364203278684e-03 , 2.78285983212252274e-03 }, + { 9.98972291238956811e-01 , 9.94592981607159587e-01 , 9.86746515028242843e-01 , 9.75486171631047450e-01 , 9.60890718706231883e-01 , 9.43062481077743042e-01 , 9.22126493670277991e-01 , 8.98229600254951133e-01 , 8.71539416990982585e-01 , 8.42243154565479712e-01 , 8.10546304204462276e-01 , 7.76671195930790925e-01 , 7.40855438901602770e-01 , 7.03350254659163010e-01 , 6.64418714941853450e-01 , 6.24333896395682819e-01 , 5.83376965119925983e-01 , 5.41835204477384980e-01 , 5.00000000000000000e-01 , 4.58164795522615020e-01 , 4.16623034880074017e-01 , 3.75666103604317125e-01 , 3.35581285058146495e-01 , 2.96649745340836934e-01 , 2.59144561098397230e-01 , 2.23328804069209103e-01 , 1.89453695795537752e-01 , 1.57756845434520315e-01 , 1.28460583009017359e-01 , 1.01770399745048853e-01 , 7.78735063297220087e-02 , 5.69375189222569578e-02 , 3.91092812937681306e-02 , 2.45138283689525886e-02 , 1.32534849717571273e-02 , 5.40701839284040645e-03 , 1.02770876104317553e-03 }, { 2.63652863974896947e-03 , 6.11939005015377843e-03 , 9.56452224454198280e-03 , 1.29430184952794673e-02 , 1.62308199237607420e-02 , 1.94048012509672706e-02 , 2.24426823312185823e-02 , 2.53231488274123021e-02 , 2.80259939991374593e-02 , 3.05322582616129948e-02 , 3.28243614363756264e-02 , 3.48862257778501730e-02 , 3.67033886242440835e-02 , 3.82631037852646169e-02 , 3.95544309187646909e-02 , 4.05683122542325122e-02 , 4.12976361182186280e-02 , 4.17372868129313943e-02 , 4.18841804965694522e-02 , 4.17372868129313943e-02 , 4.12976361182186280e-02 , 4.05683122542325122e-02 , 3.95544309187646909e-02 , 3.82631037852646169e-02 , 3.67033886242440835e-02 , 3.48862257778501730e-02 , 3.28243614363756264e-02 , 3.05322582616129948e-02 , 2.80259939991374593e-02 , 2.53231488274123021e-02 , 2.24426823312185823e-02 , 1.94048012509672706e-02 , 1.62308199237607420e-02 , 1.29430184952794673e-02 , 9.56452224454198280e-03 , 6.11939005015377843e-03 , 2.63652863974896947e-03 }, + { 9.99024965267843790e-01 , 9.94869727133192772e-01 , 9.87423164295076705e-01 , 9.76733165466764808e-01 , 9.62870666024292166e-01 , 9.45927869502316110e-01 , 9.26017510966181123e-01 , 9.03272083802658443e-01 , 8.77842951876985356e-01 , 8.49899340189592123e-01 , 8.19627207914840894e-01 , 7.87228010523903565e-01 , 7.52917358963965500e-01 , 7.16923584716188222e-01 , 6.79486220239717498e-01 , 6.40854404895082608e-01 , 6.01285226946058349e-01 , 5.61042012668933721e-01 , 5.20392573952289106e-01 , 4.79607426047710894e-01 , 4.38957987331066279e-01 , 3.98714773053941651e-01 , 3.59145595104917392e-01 , 3.20513779760282502e-01 , 2.83076415283811778e-01 , 2.47082641036034445e-01 , 2.12771989476096463e-01 , 1.80372792085159134e-01 , 1.50100659810407822e-01 , 1.22157048123014658e-01 , 9.67279161973415846e-02 , 7.39824890338189045e-02 , 5.40721304976838901e-02 , 3.71293339757077998e-02 , 2.32668345332352026e-02 , 1.25768357049232463e-02 , 5.13027286680721364e-03 , 9.75034732156190116e-04 }, { 2.50144037481967287e-03 , 5.80672235823433656e-03 , 9.07828885480661818e-03 , 1.22898698691161871e-02 , 1.54197502725875266e-02 , 1.84470407970123706e-02 , 2.13515792523372161e-02 , 2.41140309303793411e-02 , 2.67160099551661603e-02 , 2.91401995734986013e-02 , 3.13704666960665235e-02 , 3.33919689895702046e-02 , 3.51912535334494778e-02 , 3.67563462923717263e-02 , 3.80768317742231979e-02 , 3.91439223291054766e-02 , 3.99505166217639096e-02 , 4.04912468852985513e-02 , 4.07625146401928914e-02 , 4.07625146401928914e-02 , 4.04912468852985513e-02 , 3.99505166217639096e-02 , 3.91439223291054766e-02 , 3.80768317742231979e-02 , 3.67563462923717263e-02 , 3.51912535334494778e-02 , 3.33919689895702046e-02 , 3.13704666960665235e-02 , 2.91401995734986013e-02 , 2.67160099551661603e-02 , 2.41140309303793411e-02 , 2.13515792523372161e-02 , 1.84470407970123706e-02 , 1.54197502725875266e-02 , 1.22898698691161871e-02 , 9.07828885480661818e-03 , 5.80672235823433656e-03 , 2.50144037481967287e-03 }, + { 9.99073691533216457e-01 , 9.95125768427343016e-01 , 9.88049354666735491e-01 , 9.77887606162326173e-01 , 9.64704574243369084e-01 , 9.48583559646496433e-01 , 9.29626468999953048e-01 , 9.07953148715071601e-01 , 8.83700621465531744e-01 , 8.57022217947267295e-01 , 8.28086606716005424e-01 , 7.97076727478639002e-01 , 7.64188634330218775e-01 , 7.29630256154568002e-01 , 6.93620081985780734e-01 , 6.56385779624092947e-01 , 6.18162756230917876e-01 , 5.79192669998918941e-01 , 5.39721902304377776e-01 , 5.00000000000000000e-01 , 4.60278097695622279e-01 , 4.20807330001081115e-01 , 3.81837243769082124e-01 , 3.43614220375907053e-01 , 3.06379918014219266e-01 , 2.70369743845431998e-01 , 2.35811365669781253e-01 , 2.02923272521360998e-01 , 1.71913393283994548e-01 , 1.42977782052732649e-01 , 1.16299378534468256e-01 , 9.20468512849284409e-02 , 7.03735310000469239e-02 , 5.14164403535035536e-02 , 3.52954257566308882e-02 , 2.21123938376738619e-02 , 1.19506453332644726e-02 , 4.87423157265700832e-03 , 9.26308466783546964e-04 }, { 2.37647234581755051e-03 , 5.51739446958229678e-03 , 8.62811454686245906e-03 , 1.16846924160890816e-02 , 1.46674779919516891e-02 , 1.75575557490656661e-02 , 2.03366384239669212e-02 , 2.29871505544583174e-02 , 2.54923326460647012e-02 , 2.78363451704581495e-02 , 3.00043680442980756e-02 , 3.19826940693411915e-02 , 3.37588154831156353e-02 , 3.53215029853043774e-02 , 3.66608767071343114e-02 , 3.77684686614180309e-02 , 3.86372762723410090e-02 , 3.92618066436855873e-02 , 3.96381112841842354e-02 , 3.97638110697214262e-02 , 3.96381112841842354e-02 , 3.92618066436855873e-02 , 3.86372762723410090e-02 , 3.77684686614180309e-02 , 3.66608767071343114e-02 , 3.53215029853043774e-02 , 3.37588154831156353e-02 , 3.19826940693411915e-02 , 3.00043680442980756e-02 , 2.78363451704581495e-02 , 2.54923326460647012e-02 , 2.29871505544583174e-02 , 2.03366384239669212e-02 , 1.75575557490656661e-02 , 1.46674779919516891e-02 , 1.16846924160890816e-02 , 8.62811454686245906e-03 , 5.51739446958229678e-03 , 2.37647234581755051e-03 }, + { 9.99118854855279626e-01 , 9.95363119349728542e-01 , 9.88629974991887095e-01 , 9.78958409606895841e-01 , 9.66406404139338315e-01 , 9.51049403484437117e-01 , 9.32979751606129781e-01 , 9.12306115416655850e-01 , 8.89152825713259709e-01 , 8.63659127594963549e-01 , 8.35978342307089783e-01 , 8.06276944833990150e-01 , 7.74733562547564092e-01 , 7.41537900843089348e-01 , 7.06889602185802435e-01 , 6.70997045412879189e-01 , 6.34076092503626843e-01 , 5.96348790350685554e-01 , 5.58042035337627640e-01 , 5.19386208753025436e-01 , 4.80613791246974564e-01 , 4.41957964662372416e-01 , 4.03651209649314446e-01 , 3.65923907496373157e-01 , 3.29002954587120755e-01 , 2.93110397814197510e-01 , 2.58462099156910652e-01 , 2.25266437452435908e-01 , 1.93723055166009878e-01 , 1.64021657692910217e-01 , 1.36340872405036451e-01 , 1.10847174286740305e-01 , 8.76938845833441644e-02 , 6.70202483938702465e-02 , 4.89505965155628484e-02 , 3.35935958606617333e-02 , 2.10415903931041731e-02 , 1.13700250081128686e-02 , 4.63688065027149671e-03 , 8.81145144720399788e-04 }, { 2.26063854926659546e-03 , 5.24914226557640640e-03 , 8.21052919095394476e-03 , 1.11229245970834792e-02 , 1.39685034900116998e-02 , 1.67300976412739222e-02 , 1.93910839872360082e-02 , 2.19354540928366343e-02 , 2.43479038175361158e-02 , 2.66139234919684116e-02 , 2.87198845496957761e-02 , 3.06531212464644688e-02 , 3.24020067283005211e-02 , 3.39560229076169492e-02 , 3.53058236956433902e-02 , 3.64432911979020308e-02 , 3.73615845289841306e-02 , 3.80551809503131208e-02 , 3.85199090821239792e-02 , 3.87529739892124026e-02 , 3.87529739892124026e-02 , 3.85199090821239792e-02 , 3.80551809503131208e-02 , 3.73615845289841306e-02 , 3.64432911979020308e-02 , 3.53058236956433902e-02 , 3.39560229076169492e-02 , 3.24020067283005211e-02 , 3.06531212464644688e-02 , 2.87198845496957761e-02 , 2.66139234919684116e-02 , 2.43479038175361158e-02 , 2.19354540928366343e-02 , 1.93910839872360082e-02 , 1.67300976412739222e-02 , 1.39685034900116998e-02 , 1.11229245970834792e-02 , 8.21052919095394476e-03 , 5.24914226557640640e-03 , 2.26063854926659546e-03 }, + { 9.99160794287385690e-01 , 9.95583554849508112e-01 , 9.89169336780541641e-01 , 9.79953445865173078e-01 , 9.67988493748926926e-01 , 9.53342972379050524e-01 , 9.36100755846220656e-01 , 9.16360600200680664e-01 , 8.94235572523704669e-01 , 8.69852401534963127e-01 , 8.43350751017475586e-01 , 8.14882419536098190e-01 , 7.84610470805107929e-01 , 7.52708299599702979e-01 , 7.19358638525703586e-01 , 6.84752511320240731e-01 , 6.49088138670912418e-01 , 6.12569802816711362e-01 , 5.75406677431996028e-01 , 5.37811629494581500e-01 , 5.00000000000000000e-01 , 4.62188370505418500e-01 , 4.24593322568003917e-01 , 3.87430197183288638e-01 , 3.50911861329087582e-01 , 3.15247488679759269e-01 , 2.80641361474296469e-01 , 2.47291700400296993e-01 , 2.15389529194892071e-01 , 1.85117580463901837e-01 , 1.56649248982524358e-01 , 1.30147598465036901e-01 , 1.05764427476295317e-01 , 8.36393997993193361e-02 , 6.38992441537792888e-02 , 4.66570276209494136e-02 , 3.20115062510730880e-02 , 2.00465541348268869e-02 , 1.08306632194583082e-02 , 4.41644515049184616e-03 , 8.39205712614279203e-04 }, { 2.15307017908244374e-03 , 4.99996938695297308e-03 , 7.82246920390929426e-03 , 1.06005316843897773e-02 , 1.33179496035552222e-02 , 1.59591058658496397e-02 , 1.85088583517539935e-02 , 2.09525975979548452e-02 , 2.32763241845071710e-02 , 2.54667271473087466e-02 , 2.75112596212893704e-02 , 2.93982104749359735e-02 , 3.11167712904831598e-02 , 3.26570982267637075e-02 , 3.40103683804383813e-02 , 3.51688303104087455e-02 , 3.61258484305115382e-02 , 3.68759410136117322e-02 , 3.74148115881107746e-02 , 3.77393735463579100e-02 , 3.78477678236491880e-02 , 3.77393735463579100e-02 , 3.74148115881107746e-02 , 3.68759410136117322e-02 , 3.61258484305115382e-02 , 3.51688303104087455e-02 , 3.40103683804383813e-02 , 3.26570982267637075e-02 , 3.11167712904831598e-02 , 2.93982104749359735e-02 , 2.75112596212893704e-02 , 2.54667271473087466e-02 , 2.32763241845071710e-02 , 2.09525975979548452e-02 , 1.85088583517539935e-02 , 1.59591058658496397e-02 , 1.33179496035552222e-02 , 1.06005316843897773e-02 , 7.82246920390929426e-03 , 4.99996938695297308e-03 , 2.15307017908244374e-03 }, + { 9.99199809495031177e-01 , 9.95788644170430448e-01 , 9.89671254031874059e-01 , 9.80879682669102193e-01 , 9.69461778677494057e-01 , 9.55479862452063733e-01 , 9.39010284906086401e-01 , 9.20142991630908402e-01 , 8.98981026627743707e-01 , 8.75639967844740186e-01 , 8.50247295278085624e-01 , 8.22941694434623949e-01 , 7.93872298742554605e-01 , 7.63197874965596101e-01 , 7.31085956035210982e-01 , 6.97711926021487461e-01 , 6.63258062232705781e-01 , 6.27912539671439562e-01 , 5.91868403282427291e-01 , 5.55322513604259882e-01 , 5.18474471582675900e-01 , 4.81525528417324100e-01 , 4.44677486395740063e-01 , 4.08131596717572709e-01 , 3.72087460328560438e-01 , 3.36741937767294219e-01 , 3.02288073978512484e-01 , 2.68914043964789018e-01 , 2.36802125034403843e-01 , 2.06127701257445339e-01 , 1.77058305565376078e-01 , 1.49752704721914404e-01 , 1.24360032155259759e-01 , 1.01018973372256293e-01 , 7.98570083690915422e-02 , 6.09897150939136268e-02 , 4.45201375479362740e-02 , 3.05382213225059117e-02 , 1.91203173308977549e-02 , 1.03287459681259026e-02 , 4.21135582956953976e-03 , 8.00190504968792469e-04 }, { 2.05299930232454237e-03 , 4.76811015087425134e-03 , 7.46122184867874672e-03 , 1.01139347845263221e-02 , 1.27114797630565237e-02 , 1.52396203498017333e-02 , 1.76845355487960550e-02 , 2.00328675903461290e-02 , 2.22717888859829405e-02 , 2.43890703964016221e-02 , 2.63731478495870357e-02 , 2.82131846790091914e-02 , 2.98991311137933279e-02 , 3.14217790225012894e-02 , 3.27728121824544874e-02 , 3.39448516882609741e-02 , 3.49314962462970793e-02 , 3.57273571325854924e-02 , 3.63280876219020527e-02 , 3.67304067267337636e-02 , 3.69321171160864395e-02 , 3.69321171160864395e-02 , 3.67304067267337636e-02 , 3.63280876219020527e-02 , 3.57273571325854924e-02 , 3.49314962462970793e-02 , 3.39448516882609741e-02 , 3.27728121824544874e-02 , 3.14217790225012894e-02 , 2.98991311137933279e-02 , 2.82131846790091914e-02 , 2.63731478495870357e-02 , 2.43890703964016221e-02 , 2.22717888859829405e-02 , 2.00328675903461290e-02 , 1.76845355487960550e-02 , 1.52396203498017333e-02 , 1.27114797630565237e-02 , 1.01139347845263221e-02 , 7.46122184867874672e-03 , 4.76811015087425134e-03 , 2.05299930232454237e-03 }, + { 9.99236166121253877e-01 , 9.95979778796622028e-01 , 9.90139110490127705e-01 , 9.81743306507040003e-01 , 9.70835978423818968e-01 , 9.57473953603069416e-01 , 9.41726882609308369e-01 , 9.23676858104657494e-01 , 9.03417982068469350e-01 , 8.81055873597477612e-01 , 8.56707117634478488e-01 , 8.30498656875749086e-01 , 8.02567129819800495e-01 , 7.73058158330042322e-01 , 7.42125588392867352e-01 , 7.09930688014634659e-01 , 6.76641306432151923e-01 , 6.42430999016456838e-01 , 6.07478122430259115e-01 , 5.71964904755356662e-01 , 5.36076495437293077e-01 , 5.00000000000000000e-01 , 4.63923504562706868e-01 , 4.28035095244643338e-01 , 3.92521877569740885e-01 , 3.57569000983543162e-01 , 3.23358693567848077e-01 , 2.90069311985365397e-01 , 2.57874411607132648e-01 , 2.26941841669957650e-01 , 1.97432870180199532e-01 , 1.69501343124250942e-01 , 1.43292882365521485e-01 , 1.18944126402522443e-01 , 9.65820179315306782e-02 , 7.63231418953424778e-02 , 5.82731173906915687e-02 , 4.25260463969306321e-02 , 2.91640215761810699e-02 , 1.82566934929600036e-02 , 9.86088950987233474e-03 , 4.02022120337792652e-03 , 7.63833878746143237e-04 }, { 1.95974512692206372e-03 , 4.55199831870070192e-03 , 7.12437821578824296e-03 , 9.65995071184195045e-03 , 1.21452283069194075e-02 , 1.45672066307492472e-02 , 1.69132460434301447e-02 , 1.91711110970663283e-02 , 2.13290285989910407e-02 , 2.33757473771732879e-02 , 2.53005963921950766e-02 , 2.70935401594408938e-02 , 2.87452309784552579e-02 , 3.02470576249956463e-02 , 3.15911902246980569e-02 , 3.27706210631613995e-02 , 3.37792011146825846e-02 , 3.46116720968283401e-02 , 3.52636938825425170e-02 , 3.57318671262570678e-02 , 3.60137509857109891e-02 , 3.61078758468994926e-02 , 3.60137509857109891e-02 , 3.57318671262570678e-02 , 3.52636938825425170e-02 , 3.46116720968283401e-02 , 3.37792011146825846e-02 , 3.27706210631613995e-02 , 3.15911902246980569e-02 , 3.02470576249956463e-02 , 2.87452309784552579e-02 , 2.70935401594408938e-02 , 2.53005963921950766e-02 , 2.33757473771732879e-02 , 2.13290285989910407e-02 , 1.91711110970663283e-02 , 1.69132460434301447e-02 , 1.45672066307492472e-02 , 1.21452283069194075e-02 , 9.65995071184195045e-03 , 7.12437821578824296e-03 , 4.55199831870070192e-03 , 1.95974512692206372e-03 }, + { 9.99270100318387144e-01 , 9.96158196069257929e-01 , 9.90575916538956935e-01 , 9.82549825211246564e-01 , 9.72119754559097049e-01 , 9.59337629992087937e-01 , 9.44267119143021638e-01 , 9.26983297502355197e-01 , 9.07572269822567446e-01 , 8.86130739624377939e-01 , 8.62765526830358453e-01 , 8.37593035333061176e-01 , 8.10738672951787920e-01 , 7.82336226592735384e-01 , 7.52527195694101092e-01 , 7.21460087262705718e-01 , 6.89289676007353580e-01 , 6.56176233251392960e-01 , 6.22284728464100656e-01 , 5.87784007387758378e-01 , 5.52845950854326640e-01 , 5.17644618482067664e-01 , 4.82355381517932336e-01 , 4.47154049145673360e-01 , 4.12215992612241622e-01 , 3.77715271535899344e-01 , 3.43823766748607096e-01 , 3.10710323992646420e-01 , 2.78539912737294282e-01 , 2.47472804305898852e-01 , 2.17663773407264616e-01 , 1.89261327048212080e-01 , 1.62406964666938824e-01 , 1.37234473169641491e-01 , 1.13869260375622047e-01 , 9.24277301774324989e-02 , 7.30167024976448031e-02 , 5.57328808569783965e-02 , 4.06623700079121117e-02 , 2.78802454409029510e-02 , 1.74501747887534295e-02 , 9.42408346104301603e-03 , 3.84180393074209578e-03 , 7.29899681612887550e-04 }, { 1.87270240155638880e-03 , 4.35024068376242169e-03 , 6.80979337778999261e-03 , 9.23574086840737475e-03 , 1.16157409510096055e-02 , 1.39378914106405051e-02 , 1.61906114060349111e-02 , 1.83626739069044365e-02 , 2.04432561551731104e-02 , 2.24219920409850157e-02 , 2.42890232241760179e-02 , 2.60350480458522299e-02 , 2.76513677818640280e-02 , 2.91299299387977467e-02 , 3.04633683507809852e-02 , 3.16450398666019289e-02 , 3.26690574395907193e-02 , 3.35303194531468285e-02 , 3.42245351346833274e-02 , 3.47482459307862923e-02 , 3.50988427367791081e-02 , 3.52745788946770347e-02 , 3.52745788946770347e-02 , 3.50988427367791081e-02 , 3.47482459307862923e-02 , 3.42245351346833274e-02 , 3.35303194531468285e-02 , 3.26690574395907193e-02 , 3.16450398666019289e-02 , 3.04633683507809852e-02 , 2.91299299387977467e-02 , 2.76513677818640280e-02 , 2.60350480458522299e-02 , 2.42890232241760179e-02 , 2.24219920409850157e-02 , 2.04432561551731104e-02 , 1.83626739069044365e-02 , 1.61906114060349111e-02 , 1.39378914106405051e-02 , 1.16157409510096055e-02 , 9.23574086840737475e-03 , 6.80979337778999261e-03 , 4.35024068376242169e-03 , 1.87270240155638880e-03 }, + { 9.99301822590968336e-01 , 9.96324999223601848e-01 , 9.90984357517270320e-01 , 9.83304155198447272e-01 , 9.73320845497814502e-01 , 9.61081968359500216e-01 , 9.46645835876620878e-01 , 9.30081237980332154e-01 , 9.11467110251043211e-01 , 8.90892156296953175e-01 , 8.68454424472745123e-01 , 8.44260840385600231e-01 , 8.18426697226611655e-01 , 7.91075106284676588e-01 , 7.62336410231458039e-01 , 7.32347561959817539e-01 , 7.01251471929270953e-01 , 6.69196327125301083e-01 , 6.36334884876188722e-01 , 6.02823744891631819e-01 , 5.68822602991626569e-01 , 5.34493490081572098e-01 , 5.00000000000000000e-01 , 4.65506509918427902e-01 , 4.31177397008373486e-01 , 3.97176255108368126e-01 , 3.63665115123811222e-01 , 3.30803672874698917e-01 , 2.98748528070729047e-01 , 2.67652438040182461e-01 , 2.37663589768541961e-01 , 2.08924893715323412e-01 , 1.81573302773388318e-01 , 1.55739159614399741e-01 , 1.31545575527254821e-01 , 1.09107843703046853e-01 , 8.85328897489568306e-02 , 6.99187620196678877e-02 , 5.33541641233791289e-02 , 3.89180316404998047e-02 , 2.66791545021854704e-02 , 1.66958448015526971e-02 , 9.01564248272971637e-03 , 3.67500077639812926e-03 , 6.98177409031680942e-04 }, { 1.79133157764177942e-03 , 4.16159464810912042e-03 , 6.51555249579139229e-03 , 8.83876762896879456e-03 , 1.11199237752893660e-02 , 1.33481069837888319e-02 , 1.55126874672577332e-02 , 1.76033461008045095e-02 , 1.96101183646512252e-02 , 2.15234403545824862e-02 , 2.33341938591866832e-02 , 2.50337496189760138e-02 , 2.66140083656344756e-02 , 2.80674393798932380e-02 , 2.93871163594208694e-02 , 3.05667504155332607e-02 , 3.16007200369099669e-02 , 3.24840978753617171e-02 , 3.32126742249212667e-02 , 3.37829770818037708e-02 , 3.41922886893348404e-02 , 3.44386584888306604e-02 , 3.45209124146160090e-02 , 3.44386584888306604e-02 , 3.41922886893348404e-02 , 3.37829770818037708e-02 , 3.32126742249212667e-02 , 3.24840978753617171e-02 , 3.16007200369099669e-02 , 3.05667504155332607e-02 , 2.93871163594208694e-02 , 2.80674393798932380e-02 , 2.66140083656344756e-02 , 2.50337496189760138e-02 , 2.33341938591866832e-02 , 2.15234403545824862e-02 , 1.96101183646512252e-02 , 1.76033461008045095e-02 , 1.55126874672577332e-02 , 1.33481069837888319e-02 , 1.11199237752893660e-02 , 8.83876762896879456e-03 , 6.51555249579139229e-03 , 4.16159464810912042e-03 , 1.79133157764177942e-03 }, + { 9.99331521066908923e-01 , 9.96481174453087148e-01 , 9.91366834902083438e-01 , 9.84010695926995971e-01 , 9.74446181723044869e-01 , 9.62716899403377013e-01 , 9.48876355766970936e-01 , 9.32987697433429020e-01 , 9.15123418533033028e-01 , 8.95365028537637109e-01 , 8.73802679807832994e-01 , 8.50534756010202786e-01 , 8.25667423100998832e-01 , 7.99314144856357545e-01 , 7.71595165130901317e-01 , 7.42636959194082347e-01 , 7.12571656641414197e-01 , 6.81536438510497833e-01 , 6.49672911350934967e-01 , 6.17126461103134849e-01 , 5.84045589733551807e-01 , 5.50581237652792099e-01 , 5.16886095008026070e-01 , 4.83113904991973986e-01 , 4.49418762347207901e-01 , 4.15954410266448249e-01 , 3.82873538896865095e-01 , 3.50327088649064977e-01 , 3.18463561489502167e-01 , 2.87428343358585803e-01 , 2.57363040805917653e-01 , 2.28404834869098683e-01 , 2.00685855143642428e-01 , 1.74332576899001140e-01 , 1.49465243989797159e-01 , 1.26197320192166978e-01 , 1.04634971462362877e-01 , 8.48765814669669716e-02 , 6.70123025665709665e-02 , 5.11236442330290156e-02 , 3.72831005966230214e-02 , 2.55538182769551037e-02 , 1.59893040730040292e-02 , 8.63316509791656889e-03 , 3.51882554691281772e-03 , 6.68478933091009426e-04 }, { 1.71515043405352416e-03 , 3.98494911486231129e-03 , 6.23994188549434163e-03 , 8.46675700391811940e-03 , 1.06549993770682500e-02 , 1.27946431985650061e-02 , 1.48759147761013781e-02 , 1.68893139995534500e-02 , 1.88256526786930341e-02 , 2.06760950548393642e-02 , 2.24321976386590641e-02 , 2.40859475508561002e-02 , 2.56297990035715094e-02 , 2.70567076929283772e-02 , 2.83601629219956165e-02 , 2.95342172977731583e-02 , 3.05735138623252391e-02 , 3.14733105321972559e-02 , 3.22295017335695322e-02 , 3.28386371338906038e-02 , 3.32979373842274412e-02 , 3.36053068003390881e-02 , 3.37593429245182305e-02 , 3.37593429245182305e-02 , 3.36053068003390881e-02 , 3.32979373842274412e-02 , 3.28386371338906038e-02 , 3.22295017335695322e-02 , 3.14733105321972559e-02 , 3.05735138623252391e-02 , 2.95342172977731583e-02 , 2.83601629219956165e-02 , 2.70567076929283772e-02 , 2.56297990035715094e-02 , 2.40859475508561002e-02 , 2.24321976386590641e-02 , 2.06760950548393642e-02 , 1.88256526786930341e-02 , 1.68893139995534500e-02 , 1.48759147761013781e-02 , 1.27946431985650061e-02 , 1.06549993770682500e-02 , 8.46675700391811940e-03 , 6.23994188549434163e-03 , 3.98494911486231129e-03 , 1.71515043405352416e-03 }, + { 9.99359364292106034e-01 , 9.96627605493884294e-01 , 9.91725501535811849e-01 , 9.84673393663282215e-01 , 9.75501984628854180e-01 , 9.64251346506180274e-01 , 9.50970664719262615e-01 , 9.35718007898448167e-01 , 9.18560069949951097e-01 , 8.99571877083870985e-01 , 8.78836459222719357e-01 , 8.56444486704532104e-01 , 8.32493873695166364e-01 , 8.07089349978186821e-01 , 7.80342002967332138e-01 , 7.52368791931788961e-01 , 7.23292036552427797e-01 , 6.93238882042333526e-01 , 6.62340743168867929e-01 , 6.30732729607487275e-01 , 5.98553055139555923e-01 , 5.65942433277257462e-01 , 5.33043461958177867e-01 , 5.00000000000000000e-01 , 4.66956538041822133e-01 , 4.34057566722742538e-01 , 4.01446944860444077e-01 , 3.69267270392512725e-01 , 3.37659256831132071e-01 , 3.06761117957666418e-01 , 2.76707963447572147e-01 , 2.47631208068211039e-01 , 2.19657997032667890e-01 , 1.92910650021813179e-01 , 1.67506126304833636e-01 , 1.43555513295467840e-01 , 1.21163540777280684e-01 , 1.00428122916129028e-01 , 8.14399300500489448e-02 , 6.42819921015518464e-02 , 4.90293352807373226e-02 , 3.57486534938196779e-02 , 2.44980153711457788e-02 , 1.53266063367177505e-02 , 8.27449846418814618e-03 , 3.37239450611568270e-03 , 6.40635707893945361e-04 }, { 1.64372692126400744e-03 , 3.81930814792441663e-03 , 5.98142423215616056e-03 , 8.11766657321652887e-03 , 1.02184690738342139e-02 , 1.22746058298294092e-02 , 1.42770753503216937e-02 , 1.62171177575923774e-02 , 1.80862482920874749e-02 , 1.98762930612655028e-02 , 2.15794243242397703e-02 , 2.31881945432529553e-02 , 2.46955688736805838e-02 , 2.60949558900285712e-02 , 2.73802363907651135e-02 , 2.85457901466157696e-02 , 2.95865204711694384e-02 , 3.04978765043698238e-02 , 3.12758731104608306e-02 , 3.19171083028585156e-02 , 3.24187781194728644e-02 , 3.27786888832748702e-02 , 3.29952667944052383e-02 , 3.30675648118277377e-02 , 3.29952667944052383e-02 , 3.27786888832748702e-02 , 3.24187781194728644e-02 , 3.19171083028585156e-02 , 3.12758731104608306e-02 , 3.04978765043698238e-02 , 2.95865204711694384e-02 , 2.85457901466157696e-02 , 2.73802363907651135e-02 , 2.60949558900285712e-02 , 2.46955688736805838e-02 , 2.31881945432529553e-02 , 2.15794243242397703e-02 , 1.98762930612655028e-02 , 1.80862482920874749e-02 , 1.62171177575923774e-02 , 1.42770753503216937e-02 , 1.22746058298294092e-02 , 1.02184690738342139e-02 , 8.11766657321652887e-03 , 5.98142423215616056e-03 , 3.81930814792441663e-03 , 1.64372692126400744e-03 }, + { 9.99385503626213034e-01 , 9.96765086133175382e-01 , 9.92062291861413481e-01 , 9.85295796273123581e-01 , 9.76493851580215400e-01 , 9.65693345353277222e-01 , 9.52939568357784816e-01 , 9.38286010137123982e-01 , 9.21794130812196744e-01 , 9.03533102014721257e-01 , 8.83579516257870123e-01 , 8.62017065461907261e-01 , 8.38936189816331890e-01 , 8.14433698388256744e-01 , 7.88612363041986342e-01 , 7.61580487361116498e-01 , 7.33451452375479152e-01 , 7.04343240995358388e-01 , 6.74377943146080350e-01 , 6.43681243677727832e-01 , 6.12381895197344539e-01 , 5.80611178034445841e-01 , 5.48502349604731321e-01 , 5.16190085481434635e-01 , 4.83809914518565309e-01 , 4.51497650395268624e-01 , 4.19388821965554159e-01 , 3.87618104802655461e-01 , 3.56318756322272223e-01 , 3.25622056853919650e-01 , 2.95656759004641612e-01 , 2.66548547624520793e-01 , 2.38419512638883474e-01 , 2.11387636958013658e-01 , 1.85566301611743201e-01 , 1.61063810183668055e-01 , 1.37982934538092683e-01 , 1.16420483742129835e-01 , 9.64668979852786879e-02 , 7.82058691878032286e-02 , 6.17139898628760591e-02 , 4.70604316422151628e-02 , 3.43066546467228339e-02 , 2.35061484197845692e-02 , 1.47042037268763741e-02 , 7.93770813858657096e-03 , 3.23491386682462105e-03 , 6.14496373786940710e-04 }, { 1.57667302615291925e-03 , 3.66377695063813125e-03 , 5.73861728961726995e-03 , 7.78965786147192436e-03 , 9.80808022867776449e-03 , 1.17853804196621885e-02 , 1.37132548541784739e-02 , 1.55836139163990448e-02 , 1.73886112823852176e-02 , 1.91206755329153544e-02 , 2.07725414717323739e-02 , 2.23372804283471400e-02 , 2.38083292462452356e-02 , 2.51795177769272363e-02 , 2.64450947425968336e-02 , 2.75997518499920824e-02 , 2.86386460502016070e-02 , 2.95574198491978177e-02 , 3.03522195829469404e-02 , 3.10197115799463324e-02 , 3.15570961431270100e-02 , 3.19621192923240927e-02 , 3.22330822179750440e-02 , 3.23688484063419588e-02 , 3.23688484063419588e-02 , 3.22330822179750440e-02 , 3.19621192923240927e-02 , 3.15570961431270100e-02 , 3.10197115799463324e-02 , 3.03522195829469404e-02 , 2.95574198491978177e-02 , 2.86386460502016070e-02 , 2.75997518499920824e-02 , 2.64450947425968336e-02 , 2.51795177769272363e-02 , 2.38083292462452356e-02 , 2.23372804283471400e-02 , 2.07725414717323739e-02 , 1.91206755329153544e-02 , 1.73886112823852176e-02 , 1.55836139163990448e-02 , 1.37132548541784739e-02 , 1.17853804196621885e-02 , 9.80808022867776449e-03 , 7.78965786147192436e-03 , 5.73861728961726995e-03 , 3.66377695063813125e-03 , 1.57667302615291925e-03 }, + { 9.99410075303317713e-01 , 9.96894330972083909e-01 , 9.92378947957106461e-01 , 9.85881100450777703e-01 , 9.77426829337068592e-01 , 9.67050147377905067e-01 , 9.54792827914036635e-01 , 9.40704222786504451e-01 , 9.24841059922082875e-01 , 9.07267213679927687e-01 , 8.88053447172723276e-01 , 8.67277127118701308e-01 , 8.45021912212566062e-01 , 8.21377416209618794e-01 , 7.96438847054450338e-01 , 7.70306623495862985e-01 , 7.43085970726246048e-01 , 7.14886496670788296e-01 , 6.85821750631142479e-01 , 6.56008766059874349e-01 , 6.25567589306288641e-01 , 5.94620796230906801e-01 , 5.63292998634836062e-01 , 5.31710342491343413e-01 , 5.00000000000000000e-01 , 4.68289657508656587e-01 , 4.36707001365163994e-01 , 4.05379203769093199e-01 , 3.74432410693711359e-01 , 3.43991233940125596e-01 , 3.14178249368857576e-01 , 2.85113503329211759e-01 , 2.56914029273753952e-01 , 2.29693376504136959e-01 , 2.03561152945549634e-01 , 1.78622583790381151e-01 , 1.54978087787433938e-01 , 1.32722872881298637e-01 , 1.11946552827276682e-01 , 9.27327863200722857e-02 , 7.51589400779171524e-02 , 5.92957772134955416e-02 , 4.52071720859633583e-02 , 3.29498526220949259e-02 , 2.25731706629313834e-02 , 1.41188995492223107e-02 , 7.62105204289349747e-03 , 3.10566902791610446e-03 , 5.89924696682310283e-04 }, { 1.51363949446145247e-03 , 3.51754979504322572e-03 , 5.51027551579679007e-03 , 7.48107246781232541e-03 , 9.42179792654472895e-03 , 1.13246007937233377e-02 , 1.31818094635330080e-02 , 1.49859423102919123e-02 , 1.67297333958110889e-02 , 1.84061604815003443e-02 , 2.00084728831865094e-02 , 2.15302184906297975e-02 , 2.29652696777979254e-02 , 2.43078479439141210e-02 , 2.55525471650722945e-02 , 2.66943553541294856e-02 , 2.77286748374017955e-02 , 2.86513407650937357e-02 , 2.94586378800136342e-02 , 3.01473154765760087e-02 , 3.07146004895964692e-02 , 3.11582086600286322e-02 , 3.14763537325978490e-02 , 3.16677546482458730e-02 , 3.17316407023953001e-02 , 3.16677546482458730e-02 , 3.14763537325978490e-02 , 3.11582086600286322e-02 , 3.07146004895964692e-02 , 3.01473154765760087e-02 , 2.94586378800136342e-02 , 2.86513407650937357e-02 , 2.77286748374017955e-02 , 2.66943553541294856e-02 , 2.55525471650722945e-02 , 2.43078479439141210e-02 , 2.29652696777979254e-02 , 2.15302184906297975e-02 , 2.00084728831865094e-02 , 1.84061604815003443e-02 , 1.67297333958110889e-02 , 1.49859423102919123e-02 , 1.31818094635330080e-02 , 1.13246007937233377e-02 , 9.42179792654472895e-03 , 7.48107246781232541e-03 , 5.51027551579679007e-03 , 3.51754979504322572e-03 , 1.51363949446145247e-03 }, + { 9.99433202210035510e-01 , 9.97015984716045356e-01 , 9.92677042024002976e-01 , 9.86432192553346021e-01 , 9.78305477621403963e-01 , 9.68328309472438975e-01 , 9.56539278327895981e-01 , 9.42983989761806529e-01 , 9.27714884714972987e-01 , 9.10791035429667994e-01 , 8.92277916450199604e-01 , 8.72247151113034302e-01 , 8.50776234353411098e-01 , 8.27948232842719678e-01 , 8.03851463592475168e-01 , 7.78579152257324991e-01 , 7.52229072453732051e-01 , 7.24903167487019440e-01 , 6.96707155948782519e-01 , 6.67750122709718674e-01 , 6.38144096889766033e-01 , 6.08003618438020865e-01 , 5.77445294999072933e-01 , 5.46587350780043058e-01 , 5.15549169163594390e-01 , 4.84450830836405555e-01 , 4.53412649219956942e-01 , 4.22554705000927067e-01 , 3.91996381561979135e-01 , 3.61855903110234023e-01 , 3.32249877290281326e-01 , 3.03292844051217425e-01 , 2.75096832512980616e-01 , 2.47770927546267894e-01 , 2.21420847742674981e-01 , 1.96148536407524887e-01 , 1.72051767157280322e-01 , 1.49223765646588874e-01 , 1.27752848886965725e-01 , 1.07722083549800368e-01 , 8.92089645703320194e-02 , 7.22851152850269574e-02 , 5.70160102381934777e-02 , 4.34607216721040537e-02 , 3.16716905275610319e-02 , 2.16945223785960269e-02 , 1.35678074466539633e-02 , 7.32295797599705894e-03 , 2.98401528395464367e-03 , 5.66797789964474871e-04 }, { 1.45431127657757054e-03 , 3.37989959787270058e-03 , 5.29527419182548430e-03 , 7.19041138074278698e-03 , 9.05778035674469420e-03 , 1.08901215850623970e-02 , 1.26803367850061958e-02 , 1.44214967902675986e-02 , 1.61068641117890071e-02 , 1.77299178075730757e-02 , 1.92843783062938388e-02 , 2.07642315450738482e-02 , 2.21637521694016369e-02 , 2.34775256519742168e-02 , 2.47004692247331584e-02 , 2.58278515347905684e-02 , 2.68553109444981224e-02 , 2.77788724031062598e-02 , 2.85949628238641902e-02 , 2.93004249066112221e-02 , 2.98925293521327268e-02 , 3.03689854208851091e-02 , 3.07279497951583325e-02 , 3.09680337103416213e-02 , 3.10883083276736298e-02 , 3.10883083276736298e-02 , 3.09680337103416213e-02 , 3.07279497951583325e-02 , 3.03689854208851091e-02 , 2.98925293521327268e-02 , 2.93004249066112221e-02 , 2.85949628238641902e-02 , 2.77788724031062598e-02 , 2.68553109444981224e-02 , 2.58278515347905684e-02 , 2.47004692247331584e-02 , 2.34775256519742168e-02 , 2.21637521694016369e-02 , 2.07642315450738482e-02 , 1.92843783062938388e-02 , 1.77299178075730757e-02 , 1.61068641117890071e-02 , 1.44214967902675986e-02 , 1.26803367850061958e-02 , 1.08901215850623970e-02 , 9.05778035674469420e-03 , 7.19041138074278698e-03 , 5.29527419182548430e-03 , 3.37989959787270058e-03 , 1.45431127657757054e-03 }, + { 9.99454995424451709e-01 , 9.97130630218376224e-01 , 9.92957995867951526e-01 , 9.86951684009661934e-01 , 9.79133924306954118e-01 , 9.69533772001481164e-01 , 9.58186931154890065e-01 , 9.45135609014763678e-01 , 9.30428355591146117e-01 , 9.14119881911532373e-01 , 8.96270856049690590e-01 , 8.76947677242687740e-01 , 8.56222228788518280e-01 , 8.34171610587685075e-01 , 8.10877852300361690e-01 , 7.86427608175651938e-01 , 7.60911834683092869e-01 , 7.34425452143020463e-01 , 7.07066991613151896e-01 , 6.78938228344204697e-01 , 6.50143803167665957e-01 , 6.20790833223899385e-01 , 5.90988513478538757e-01 , 5.60847710509444375e-01 , 5.30480550075289381e-01 , 5.00000000000000000e-01 , 4.69519449924710619e-01 , 4.39152289490555625e-01 , 4.09011486521461243e-01 , 3.79209166776100615e-01 , 3.49856196832334043e-01 , 3.21061771655795247e-01 , 2.92933008386848048e-01 , 2.65574547856979482e-01 , 2.39088165316907075e-01 , 2.13572391824348090e-01 , 1.89122147699638365e-01 , 1.65828389412314953e-01 , 1.43777771211481664e-01 , 1.23052322757312232e-01 , 1.03729143950309396e-01 , 8.58801180884675858e-02 , 6.95716444088538138e-02 , 5.48643909852363498e-02 , 4.18130688451098867e-02 , 3.04662279985188078e-02 , 2.08660756930459032e-02 , 1.30483159903380663e-02 , 7.04200413204850162e-03 , 2.86936978162371289e-03 , 5.45004575548252370e-04 }, { 1.39840358554494770e-03 , 3.25016889162630003e-03 , 5.09259564891086525e-03 , 6.91631700323891083e-03 , 8.71435736170052613e-03 , 1.04799942008516056e-02 , 1.22066502868907172e-02 , 1.38878992970812385e-02 , 1.55174856450800043e-02 , 1.70893466020941680e-02 , 1.85976344616301456e-02 , 2.00367381427482283e-02 , 2.14013039989400418e-02 , 2.26862557038250354e-02 , 2.38868131203115522e-02 , 2.49985100750287036e-02 , 2.60172109683485427e-02 , 2.69391261565227816e-02 , 2.77608260478693462e-02 , 2.84792538601293319e-02 , 2.90917369912960695e-02 , 2.95959969614807729e-02 , 2.99901578887516243e-02 , 3.02727534673688965e-02 , 3.04427324224281724e-02 , 3.04994624206029394e-02 , 3.04427324224281724e-02 , 3.02727534673688965e-02 , 2.99901578887516243e-02 , 2.95959969614807729e-02 , 2.90917369912960695e-02 , 2.84792538601293319e-02 , 2.77608260478693462e-02 , 2.69391261565227816e-02 , 2.60172109683485427e-02 , 2.49985100750287036e-02 , 2.38868131203115522e-02 , 2.26862557038250354e-02 , 2.14013039989400418e-02 , 2.00367381427482283e-02 , 1.85976344616301456e-02 , 1.70893466020941680e-02 , 1.55174856450800043e-02 , 1.38878992970812385e-02 , 1.22066502868907172e-02 , 1.04799942008516056e-02 , 8.71435736170052613e-03 , 6.91631700323891083e-03 , 5.09259564891086525e-03 , 3.25016889162630003e-03 , 1.39840358554494770e-03 }, + { 9.99475555551975092e-01 , 9.97238795464608030e-01 , 9.93223097825774892e-01 , 9.87441942110872217e-01 , 9.79915913466543276e-01 , 9.70671926820679487e-01 , 9.59743064458212225e-01 , 9.47168445267247638e-01 , 9.32993081423033832e-01 , 9.17267716163367219e-01 , 9.00048641715234132e-01 , 8.81397497596872470e-01 , 8.61381049874991644e-01 , 8.40070952113583846e-01 , 8.17543488847622957e-01 , 7.93879302489789551e-01 , 7.69163104642913709e-01 , 7.43483372849047974e-01 , 7.16932033859380868e-01 , 6.89604134558046811e-01 , 6.61597501717403946e-01 , 6.33012391802500907e-01 , 6.03951132078183073e-01 , 5.74517754303474626e-01 , 5.44817622324450301e-01 , 5.14957054898669386e-01 , 4.85042945101330614e-01 , 4.55182377675549699e-01 , 4.25482245696525430e-01 , 3.96048867921816983e-01 , 3.66987608197499093e-01 , 3.38402498282596109e-01 , 3.10395865441953189e-01 , 2.83067966140619187e-01 , 2.56516627150951970e-01 , 2.30836895357086291e-01 , 2.06120697510210449e-01 , 1.82456511152377043e-01 , 1.59929047886416154e-01 , 1.38618950125008411e-01 , 1.18602502403127516e-01 , 9.99513582847658399e-02 , 8.27322838366327251e-02 , 6.70069185769662096e-02 , 5.28315547327523408e-02 , 4.02569355417877334e-02 , 2.93280731793204713e-02 , 2.00840865334567242e-02 , 1.25580578891277481e-02 , 6.77690217422507925e-03 , 2.76120453539198526e-03 , 5.24444448024860913e-04 }, { 1.34565847502355566e-03 , 3.12776198148663823e-03 , 4.90131728973137570e-03 , 6.65755749117048073e-03 , 8.39001169815036842e-03 , 1.00924457539903964e-02 , 1.17587567769922314e-02 , 1.33829768732520067e-02 , 1.49592905735719730e-02 , 1.64820545448594001e-02 , 1.79458174175486165e-02 , 1.93453391552119887e-02 , 2.06756097502801342e-02 , 2.19318671295002030e-02 , 2.31096141863923951e-02 , 2.42046348720374484e-02 , 2.52130092831711894e-02 , 2.61311276919534950e-02 , 2.69557034663786312e-02 , 2.76837848346513267e-02 , 2.83127654511842984e-02 , 2.88403937262634129e-02 , 2.92647808859069353e-02 , 2.95844077330214839e-02 , 2.97981300856240798e-02 , 2.99051828726459301e-02 , 2.99051828726459301e-02 , 2.97981300856240798e-02 , 2.95844077330214839e-02 , 2.92647808859069353e-02 , 2.88403937262634129e-02 , 2.83127654511842984e-02 , 2.76837848346513267e-02 , 2.69557034663786312e-02 , 2.61311276919534950e-02 , 2.52130092831711894e-02 , 2.42046348720374484e-02 , 2.31096141863923951e-02 , 2.19318671295002030e-02 , 2.06756097502801342e-02 , 1.93453391552119887e-02 , 1.79458174175486165e-02 , 1.64820545448594001e-02 , 1.49592905735719730e-02 , 1.33829768732520067e-02 , 1.17587567769922314e-02 , 1.00924457539903964e-02 , 8.39001169815036842e-03 , 6.65755749117048073e-03 , 4.90131728973137570e-03 , 3.12776198148663823e-03 , 1.34565847502355566e-03 }, + { 9.99494973888164107e-01 , 9.97340959654003489e-01 , 9.93473517511685777e-01 , 9.87905116857492271e-01 , 9.80654847311568156e-01 , 9.71747676732220955e-01 , 9.61214301521406078e-01 , 9.49091028937713244e-01 , 9.35419648779120649e-01 , 9.20247288272900699e-01 , 9.03626249208447696e-01 , 8.85613827462766179e-01 , 8.66272115403755150e-01 , 8.45667787800683302e-01 , 8.23871871958255064e-01 , 8.00959502856884664e-01 , 7.77009664138533895e-01 , 7.52104915828566756e-01 , 7.26331109730922853e-01 , 6.99777093476976475e-01 , 6.72534404247861151e-01 , 6.44696953225813107e-01 , 6.16360701862136318e-01 , 5.87623331077662847e-01 , 5.58583904535977616e-01 , 5.29342527150129749e-01 , 5.00000000000000000e-01 , 4.70657472849870251e-01 , 4.41416095464022440e-01 , 4.12376668922337097e-01 , 3.83639298137863682e-01 , 3.55303046774186893e-01 , 3.27465595752138849e-01 , 3.00222906523023525e-01 , 2.73668890269077092e-01 , 2.47895084171433272e-01 , 2.22990335861466049e-01 , 1.99040497143115336e-01 , 1.76128128041744964e-01 , 1.54332212199316643e-01 , 1.33727884596244878e-01 , 1.14386172537233849e-01 , 9.63737507915522623e-02 , 7.97527117270993152e-02 , 6.45803512208793229e-02 , 5.09089710622866870e-02 , 3.87856984785939357e-02 , 2.82523232677790587e-02 , 1.93451526884318332e-02 , 1.20948831425077095e-02 , 6.52648248831423899e-03 , 2.65904034599646075e-03 , 5.05026111835886471e-04 }, { 1.29584186028351592e-03 , 3.01213811347433684e-03 , 4.72060114247017243e-03 , 6.41301307212018955e-03 , 8.08336262834373140e-03 , 9.72586055381844707e-03 , 1.13348365285351037e-02 , 1.29047412553787589e-02 , 1.44301618089118684e-02 , 1.59058392295096628e-02 , 1.73266862917671183e-02 , 1.86878049017414581e-02 , 1.99845029217701892e-02 , 2.12123103172600080e-02 , 2.23669945518364041e-02 , 2.34445751703751572e-02 , 2.44413375163495712e-02 , 2.53538455346463583e-02 , 2.61789536149363601e-02 , 2.69138174343655154e-02 , 2.75559037619667983e-02 , 2.81029991908698547e-02 , 2.85532177681335972e-02 , 2.89050074958565988e-02 , 2.91571556811280053e-02 , 2.93087931163601295e-02 , 2.93593970755821818e-02 , 2.93087931163601295e-02 , 2.91571556811280053e-02 , 2.89050074958565988e-02 , 2.85532177681335972e-02 , 2.81029991908698547e-02 , 2.75559037619667983e-02 , 2.69138174343655154e-02 , 2.61789536149363601e-02 , 2.53538455346463583e-02 , 2.44413375163495712e-02 , 2.34445751703751572e-02 , 2.23669945518364041e-02 , 2.12123103172600080e-02 , 1.99845029217701892e-02 , 1.86878049017414581e-02 , 1.73266862917671183e-02 , 1.59058392295096628e-02 , 1.44301618089118684e-02 , 1.29047412553787589e-02 , 1.13348365285351037e-02 , 9.72586055381844707e-03 , 8.08336262834373140e-03 , 6.41301307212018955e-03 , 4.72060114247017243e-03 , 3.01213811347433684e-03 , 1.29584186028351592e-03 }, + { 9.99513333433670437e-01 , 9.97437558509169486e-01 , 9.93710318698671768e-01 , 9.88343164428951648e-01 , 9.81353822892961802e-01 , 9.72765487582497923e-01 , 9.62606679933325715e-01 , 9.50911143142350812e-01 , 9.37717727032784443e-01 , 9.23070257985386444e-01 , 9.07017392956783963e-01 , 8.89612457673127022e-01 , 8.70913269404592127e-01 , 8.50981944859586448e-01 , 8.29884693815991614e-01 , 8.07691599165563656e-01 , 7.84476384097604673e-01 , 7.60316167192966574e-01 , 7.35291206240691109e-01 , 7.09484631627602225e-01 , 6.82982170186095638e-01 , 6.55871860417234109e-01 , 6.28243760034998600e-01 , 6.00189646803106824e-01 , 5.71802713658128070e-01 , 5.43177259131624068e-01 , 5.14408374099670884e-01 , 4.85591625900329116e-01 , 4.56822740868375876e-01 , 4.28197286341871930e-01 , 3.99810353196893231e-01 , 3.71756239965001345e-01 , 3.44128139582765891e-01 , 3.17017829813904417e-01 , 2.90515368372397720e-01 , 2.64708793759308836e-01 , 2.39683832807033453e-01 , 2.15523615902395271e-01 , 1.92308400834436316e-01 , 1.70115306184008441e-01 , 1.49018055140413552e-01 , 1.29086730595407845e-01 , 1.10387542326872992e-01 , 9.29826070432160784e-02 , 7.69297420146135280e-02 , 6.22822729672155295e-02 , 4.90888568576492088e-02 , 3.73933200666742571e-02 , 2.72345124175020735e-02 , 1.86461771070382080e-02 , 1.16568355710483813e-02 , 6.28968130132822115e-03 , 2.56244149083055756e-03 , 4.86666566329508048e-04 }, { 1.24874091788079299e-03 , 2.90280550761999254e-03 , 4.54968472775469854e-03 , 6.18166406442382209e-03 , 7.79315151796206550e-03 , 9.37876381073468948e-03 , 1.09332257114265422e-02 , 1.24513707336043871e-02 , 1.39281546552979356e-02 , 1.53586712489353384e-02 , 1.67381682321863234e-02 , 1.80620629201917772e-02 , 1.93259573910512586e-02 , 2.05256530683224879e-02 , 2.16571646547985067e-02 , 2.27167333641383577e-02 , 2.37008394032224949e-02 , 2.46062136622644430e-02 , 2.54298485730940702e-02 , 2.61690080991493733e-02 , 2.68212368237768055e-02 , 2.73843681065289932e-02 , 2.78565312802949924e-02 , 2.82361578653129823e-02 , 2.85219867793972993e-02 , 2.87130685270560564e-02 , 2.88087683535735127e-02 , 2.88087683535735127e-02 , 2.87130685270560564e-02 , 2.85219867793972993e-02 , 2.82361578653129823e-02 , 2.78565312802949924e-02 , 2.73843681065289932e-02 , 2.68212368237768055e-02 , 2.61690080991493733e-02 , 2.54298485730940702e-02 , 2.46062136622644430e-02 , 2.37008394032224949e-02 , 2.27167333641383577e-02 , 2.16571646547985067e-02 , 2.05256530683224879e-02 , 1.93259573910512586e-02 , 1.80620629201917772e-02 , 1.67381682321863234e-02 , 1.53586712489353384e-02 , 1.39281546552979356e-02 , 1.24513707336043871e-02 , 1.09332257114265422e-02 , 9.37876381073468948e-03 , 7.79315151796206550e-03 , 6.18166406442382209e-03 , 4.54968472775469854e-03 , 2.90280550761999254e-03 , 1.24874091788079299e-03 }, + { 9.99530709782409321e-01 , 9.97528988923705895e-01 , 9.93934470599444619e-01 , 9.88757867751994590e-01 , 9.82015664296567614e-01 , 9.73729434020605411e-01 , 9.63925712360395814e-01 , 9.52635900371999966e-01 , 9.39896161209947789e-01 , 9.25747303308577241e-01 , 9.10234649279660468e-01 , 8.93407890563811202e-01 , 8.75320928174010970e-01 , 8.56031699993318851e-01 , 8.35601995159913180e-01 , 8.14097256124964086e-01 , 7.91586369013016045e-01 , 7.68141442954171638e-01 , 7.43837579093737045e-01 , 7.18752630018587246e-01 , 6.92966950370489720e-01 , 6.66563139445011887e-01 , 6.39625776600403317e-01 , 6.12241150323922789e-01 , 5.84496981823436568e-01 , 5.56482144029664672e-01 , 5.28286376909168354e-01 , 5.00000000000000000e-01 , 4.71713623090831591e-01 , 4.43517855970335384e-01 , 4.15503018176563377e-01 , 3.87758849676077266e-01 , 3.60374223399596738e-01 , 3.33436860554988057e-01 , 3.07033049629510280e-01 , 2.81247369981412698e-01 , 2.56162420906262955e-01 , 2.31858557045828362e-01 , 2.08413630986983955e-01 , 1.85902743875035914e-01 , 1.64398004840086792e-01 , 1.43968300006681094e-01 , 1.24679071825989043e-01 , 1.06592109436188812e-01 , 8.97653507203395457e-02 , 7.42526966914227593e-02 , 6.01038387900522456e-02 , 4.73640996279999851e-02 , 3.60742876396041509e-02 , 2.62705659793946306e-02 , 1.79843357034323997e-02 , 1.12421322480053959e-02 , 6.06552940055540054e-03 , 2.47101107629406260e-03 , 4.69290217590729263e-04 }, { 1.20416180998989442e-03 , 2.79931613328038374e-03 , 4.38787305352926395e-03 , 5.96258035992430595e-03 , 7.51822916675589422e-03 , 9.04980726036453201e-03 , 1.05524008340082270e-02 , 1.20211940048628105e-02 , 1.34514807281981355e-02 , 1.48386788825805201e-02 , 1.61783446130929140e-02 , 1.74661864367949421e-02 , 1.86980789339827730e-02 , 1.98700759371685902e-02 , 2.09784231588593800e-02 , 2.20195702108032937e-02 , 2.29901819731419196e-02 , 2.38871492756003480e-02 , 2.47075988557758711e-02 , 2.54489025622469875e-02 , 2.61086857728160433e-02 , 2.66848350008027368e-02 , 2.71755046649555521e-02 , 2.75791230012543444e-02 , 2.78943970976420416e-02 , 2.81203170355421826e-02 , 2.82561591248860003e-02 , 2.83014882222802112e-02 , 2.82561591248860003e-02 , 2.81203170355421826e-02 , 2.78943970976420416e-02 , 2.75791230012543444e-02 , 2.71755046649555521e-02 , 2.66848350008027368e-02 , 2.61086857728160433e-02 , 2.54489025622469875e-02 , 2.47075988557758711e-02 , 2.38871492756003480e-02 , 2.29901819731419196e-02 , 2.20195702108032937e-02 , 2.09784231588593800e-02 , 1.98700759371685902e-02 , 1.86980789339827730e-02 , 1.74661864367949421e-02 , 1.61783446130929140e-02 , 1.48386788825805201e-02 , 1.34514807281981355e-02 , 1.20211940048628105e-02 , 1.05524008340082270e-02 , 9.04980726036453201e-03 , 7.51822916675589422e-03 , 5.96258035992430595e-03 , 4.38787305352926395e-03 , 2.79931613328038374e-03 , 1.20416180998989442e-03 }, + { 9.99547171900732834e-01 , 9.97615613040534921e-01 , 9.94146857770080716e-01 , 9.89150854570128191e-01 , 9.82642950952745120e-01 , 9.74643239780981330e-01 , 9.65176440123748147e-01 , 9.54271810210327698e-01 , 9.41963054163913793e-01 , 9.28288216881374306e-01 , 9.13289566071440850e-01 , 8.97013461446933280e-01 , 8.79510211352564464e-01 , 8.60833917225094059e-01 , 8.41042306347235202e-01 , 8.20196553403503392e-01 , 7.98361091385331623e-01 , 7.75603412427767314e-01 , 7.51993859192190861e-01 , 7.27605407439229745e-01 , 7.02513440463545580e-01 , 6.76795516087477234e-01 , 6.50531126933610371e-01 , 6.23801454717168635e-01 , 5.96689119317637573e-01 , 5.69277923405188124e-01 , 5.41652593411217742e-01 , 5.13898517643637698e-01 , 4.86101482356362302e-01 , 4.58347406588782313e-01 , 4.30722076594811876e-01 , 4.03310880682362372e-01 , 3.76198545282831365e-01 , 3.49468873066389685e-01 , 3.23204483912522766e-01 , 2.97486559536454365e-01 , 2.72394592560770199e-01 , 2.48006140807809139e-01 , 2.24396587572232686e-01 , 2.01638908614668350e-01 , 1.79803446596496552e-01 , 1.58957693652764770e-01 , 1.39166082774905969e-01 , 1.20489788647435550e-01 , 1.02986538553066748e-01 , 8.67104339285591774e-02 , 7.17117831186256799e-02 , 5.80369458360862275e-02 , 4.57281897896722536e-02 , 3.48235598762518528e-02 , 2.53567602190186807e-02 , 1.73570490472549077e-02 , 1.08491454298718076e-02 , 5.85314222991924465e-03 , 2.38438695946512633e-03 , 4.52828099267207798e-04 }, { 1.16192768788660780e-03 , 2.70126112300766909e-03 , 4.23453158165394347e-03 , 5.75491217019169152e-03 , 7.25754463901073614e-03 , 8.73775645570047318e-03 , 1.01909649412012856e-02 , 1.16126757812826577e-02 , 1.29984935291959751e-02 , 1.43441342369113704e-02 , 1.56454383736552224e-02 , 1.68983835578058808e-02 , 1.80990969361575944e-02 , 1.92438671296238303e-02 , 2.03291556923722583e-02 , 2.13516080423335440e-02 , 2.23080638263461403e-02 , 2.31955666865009472e-02 , 2.40113733968001300e-02 , 2.47529623415237883e-02 , 2.54180413088992418e-02 , 2.60045545758707010e-02 , 2.65106892620053831e-02 , 2.69348809328572442e-02 , 2.72758184354447118e-02 , 2.75324479508812121e-02 , 2.77039762516225613e-02 , 2.77898731532571983e-02 , 2.77898731532571983e-02 , 2.77039762516225613e-02 , 2.75324479508812121e-02 , 2.72758184354447118e-02 , 2.69348809328572442e-02 , 2.65106892620053831e-02 , 2.60045545758707010e-02 , 2.54180413088992418e-02 , 2.47529623415237883e-02 , 2.40113733968001300e-02 , 2.31955666865009472e-02 , 2.23080638263461403e-02 , 2.13516080423335440e-02 , 2.03291556923722583e-02 , 1.92438671296238303e-02 , 1.80990969361575944e-02 , 1.68983835578058808e-02 , 1.56454383736552224e-02 , 1.43441342369113704e-02 , 1.29984935291959751e-02 , 1.16126757812826577e-02 , 1.01909649412012856e-02 , 8.73775645570047318e-03 , 7.25754463901073614e-03 , 5.75491217019169152e-03 , 4.23453158165394347e-03 , 2.70126112300766909e-03 , 1.16192768788660780e-03 }, + { 9.99562782812631445e-01 , 9.97697761839215103e-01 , 9.94348288825111060e-01 , 9.89523613354734377e-01 , 9.83238042585943273e-01 , 9.75510313223938330e-01 , 9.66363480533550812e-01 , 9.55824839260695613e-01 , 9.43925839441110637e-01 , 9.30701991631023517e-01 , 9.16192760575219589e-01 , 9.00441447273609086e-01 , 8.83495059679725081e-01 , 8.65404172372261637e-01 , 8.46222775599758892e-01 , 8.26008114140488470e-01 , 8.04820516454357704e-01 , 7.82723214634618358e-01 , 7.59782155695593819e-01 , 7.36065804758987863e-01 , 7.11644940725781994e-01 , 6.86592445043297195e-01 , 6.60983084197689363e-01 , 6.34893286580919369e-01 , 6.08400914398061987e-01 , 5.81585031295632104e-01 , 5.54525666404393935e-01 , 5.27303575500823407e-01 , 5.00000000000000000e-01 , 4.72696424499176593e-01 , 4.45474333595606120e-01 , 4.18414968704367896e-01 , 3.91599085601937957e-01 , 3.65106713419080631e-01 , 3.39016915802310692e-01 , 3.13407554956702750e-01 , 2.88355059274218006e-01 , 2.63934195241012137e-01 , 2.40217844304406181e-01 , 2.17276785365381614e-01 , 1.95179483545642324e-01 , 1.73991885859511558e-01 , 1.53777224400241136e-01 , 1.34595827627738335e-01 , 1.16504940320274905e-01 , 9.95585527263908726e-02 , 8.38072394247804386e-02 , 6.92980083689765242e-02 , 5.60741605588893355e-02 , 4.41751607393043935e-02 , 3.36365194664491537e-02 , 2.44896867760616282e-02 , 1.67619574140566614e-02 , 1.04763866452656437e-02 , 5.65171117488897506e-03 , 2.30223816078484449e-03 , 4.37217187368574701e-04 }, { 1.12187693612533150e-03 , 2.60826673735938984e-03 , 4.08908003391061665e-03 , 5.55788186616799473e-03 , 7.01013539537677800e-03 , 8.44147951172077513e-03 , 9.84763534974426001e-03 , 1.12244039453882182e-02 , 1.25676754954590613e-02 , 1.38734407010900965e-02 , 1.51378024213469995e-02 , 1.63569871831857824e-02 , 1.75273563911563096e-02 , 1.86454171622086572e-02 , 1.97078327377400581e-02 , 2.07114324354005543e-02 , 2.16532211081075995e-02 , 2.25303880806905776e-02 , 2.33403155368207514e-02 , 2.40805863308438742e-02 , 2.47489912010098387e-02 , 2.53435353624637053e-02 , 2.58624444602589126e-02 , 2.63041698645887154e-02 , 2.66673932924095802e-02 , 2.69510307416492879e-02 , 2.71542357262493199e-02 , 2.72764018023809417e-02 , 2.73171643782920137e-02 , 2.72764018023809417e-02 , 2.71542357262493199e-02 , 2.69510307416492879e-02 , 2.66673932924095802e-02 , 2.63041698645887154e-02 , 2.58624444602589126e-02 , 2.53435353624637053e-02 , 2.47489912010098387e-02 , 2.40805863308438742e-02 , 2.33403155368207514e-02 , 2.25303880806905776e-02 , 2.16532211081075995e-02 , 2.07114324354005543e-02 , 1.97078327377400581e-02 , 1.86454171622086572e-02 , 1.75273563911563096e-02 , 1.63569871831857824e-02 , 1.51378024213469995e-02 , 1.38734407010900965e-02 , 1.25676754954590613e-02 , 1.12244039453882182e-02 , 9.84763534974426001e-03 , 8.44147951172077513e-03 , 7.01013539537677800e-03 , 5.55788186616799473e-03 , 4.08908003391061665e-03 , 2.60826673735938984e-03 , 1.12187693612533150e-03 }, + { 9.99577600203693351e-01 , 9.97775738298645409e-01 , 9.94539504124221319e-01 , 9.89877507347175167e-01 , 9.83803101251462087e-01 , 9.76333778759434501e-01 , 9.67491068794129605e-01 , 9.57300464282176300e-01 , 9.45791346011015110e-01 , 9.32996897037403738e-01 , 9.18954006669686629e-01 , 9.03703163956544042e-01 , 8.87288340874826331e-01 , 8.69756865510021182e-01 , 8.51159285576954083e-01 , 8.31549222666062571e-01 , 8.10983217631539577e-01 , 7.89520567565112463e-01 , 7.67223154824423825e-01 , 7.44155268608359233e-01 , 7.20383419593419783e-01 , 6.95976148165376562e-01 , 6.71003826798997616e-01 , 6.45538457155554579e-01 , 6.19653462483076733e-01 , 5.93423475917880694e-01 , 5.66924125297733394e-01 , 5.40231815107071411e-01 , 5.13423506182971168e-01 , 4.86576493817028832e-01 , 4.59768184892928644e-01 , 4.33075874702266550e-01 , 4.06576524082119306e-01 , 3.80346537516923267e-01 , 3.54461542844445421e-01 , 3.28996173201002384e-01 , 3.04023851834623438e-01 , 2.79616580406580217e-01 , 2.55844731391640767e-01 , 2.32776845175576202e-01 , 2.10479432434887481e-01 , 1.89016782368460451e-01 , 1.68450777333937374e-01 , 1.48840714423045944e-01 , 1.30243134489978873e-01 , 1.12711659125173627e-01 , 9.62968360434559301e-02 , 8.10459933303133429e-02 , 6.70031029625962615e-02 , 5.42086539889849103e-02 , 4.26995357178237278e-02 , 3.25089312058703256e-02 , 2.36662212405654541e-02 , 1.61968987485379551e-02 , 1.01224926528248448e-02 , 5.46049587577868145e-03 , 2.22426170135454860e-03 , 4.22399796306696749e-04 }, { 1.08386162481372505e-03 , 2.51999080632512142e-03 , 3.95098692499933762e-03 , 5.37077676643938663e-03 , 6.77511855649440622e-03 , 8.15993711748548220e-03 , 9.52123273094670347e-03 , 1.08550780700731181e-02 , 1.21576263624819762e-02 , 1.34251215909909349e-02 , 1.46539090220802453e-02 , 1.58404456269046617e-02 , 1.69813102467080042e-02 , 1.80732134335436362e-02 , 1.91130069229292175e-02 , 2.00976927049338998e-02 , 2.10244316647910622e-02 , 2.18905517668201259e-02 , 2.26935557574099028e-02 , 2.34311283645131721e-02 , 2.41011429727088743e-02 , 2.47016677544811963e-02 , 2.52309712399765643e-02 , 2.56875273091428623e-02 , 2.60700195918349108e-02 , 2.63773452631854179e-02 , 2.66086182232895055e-02 , 2.67631716520291274e-02 , 2.68405599316674237e-02 , 2.68405599316674237e-02 , 2.67631716520291274e-02 , 2.66086182232895055e-02 , 2.63773452631854179e-02 , 2.60700195918349108e-02 , 2.56875273091428623e-02 , 2.52309712399765643e-02 , 2.47016677544811963e-02 , 2.41011429727088743e-02 , 2.34311283645131721e-02 , 2.26935557574099028e-02 , 2.18905517668201259e-02 , 2.10244316647910622e-02 , 2.00976927049338998e-02 , 1.91130069229292175e-02 , 1.80732134335436362e-02 , 1.69813102467080042e-02 , 1.58404456269046617e-02 , 1.46539090220802453e-02 , 1.34251215909909349e-02 , 1.21576263624819762e-02 , 1.08550780700731181e-02 , 9.52123273094670347e-03 , 8.15993711748548220e-03 , 6.77511855649440622e-03 , 5.37077676643938663e-03 , 3.95098692499933762e-03 , 2.51999080632512142e-03 , 1.08386162481372505e-03 }, + { 9.99591676954647346e-01 , 9.97849820191622938e-01 , 9.94721182566865481e-01 , 9.90213786978357824e-01 , 9.84340110840890792e-01 , 9.77116504688475551e-01 , 9.68563095176726896e-01 , 9.58703719394077614e-01 , 9.47565855871736029e-01 , 9.35180547146441166e-01 , 9.21582312908436063e-01 , 9.06809053644105800e-01 , 8.90901944931180467e-01 , 8.73905322639320081e-01 , 8.55866559338598898e-01 , 8.36835932252468551e-01 , 8.16866483119425002e-01 , 7.96013870352015096e-01 , 7.74336213904198156e-01 , 7.51893933278859006e-01 , 7.28749579126633296e-01 , 7.04967658905209515e-01 , 6.80614457084897428e-01 , 6.55757850401506803e-01 , 6.30467118671405813e-01 , 6.04812751696018225e-01 , 5.78866252793929004e-01 , 5.52699939508172089e-01 , 5.26386742044155032e-01 , 5.00000000000000000e-01 , 4.73613257955844968e-01 , 4.47300060491827911e-01 , 4.21133747206070996e-01 , 3.95187248303981720e-01 , 3.69532881328594132e-01 , 3.44242149598493141e-01 , 3.19385542915102572e-01 , 2.95032341094790540e-01 , 2.71250420873366649e-01 , 2.48106066721140994e-01 , 2.25663786095801816e-01 , 2.03986129647984932e-01 , 1.83133516880574942e-01 , 1.63164067747531394e-01 , 1.44133440661401130e-01 , 1.26094677360679891e-01 , 1.09098055068819547e-01 , 9.31909463558942136e-02 , 7.84176870915638952e-02 , 6.48194528535588621e-02 , 5.24341441282639570e-02 , 4.12962806059223586e-02 , 3.14369048232730694e-02 , 2.28834953115244731e-02 , 1.56598891591092360e-02 , 9.78621302164215529e-03 , 5.27881743313453420e-03 , 2.15017980837701756e-03 , 4.08323045352658139e-04 }, { 1.04774614227061175e-03 , 2.43611958413264247e-03 , 3.81976472674378734e-03 , 5.19294275049793103e-03 , 6.55168315317259525e-03 , 7.89217365654073383e-03 , 9.21067137680501441e-03 , 1.05034991442185931e-02 , 1.17670526968566818e-02 , 1.29978098656492493e-02 , 1.41923401002673998e-02 , 1.53473139180558410e-02 , 1.64595121355226373e-02 , 1.75258348182000534e-02 , 1.85433099094354618e-02 , 1.95091015080800061e-02 , 2.04205177693433521e-02 , 2.12750184055338180e-02 , 2.20702217651486884e-02 , 2.28039114702548833e-02 , 2.34740425934810079e-02 , 2.40787473573032193e-02 , 2.46163403396809921e-02 , 2.50853231714984505e-02 , 2.54843887126969572e-02 , 2.58124246954457397e-02 , 2.60685168241876972e-02 , 2.62519513239143701e-02 , 2.63622169295639648e-02 , 2.63990063109952114e-02 , 2.63622169295639648e-02 , 2.62519513239143701e-02 , 2.60685168241876972e-02 , 2.58124246954457397e-02 , 2.54843887126969572e-02 , 2.50853231714984505e-02 , 2.46163403396809921e-02 , 2.40787473573032193e-02 , 2.34740425934810079e-02 , 2.28039114702548833e-02 , 2.20702217651486884e-02 , 2.12750184055338180e-02 , 2.04205177693433521e-02 , 1.95091015080800061e-02 , 1.85433099094354618e-02 , 1.75258348182000534e-02 , 1.64595121355226373e-02 , 1.53473139180558410e-02 , 1.41923401002673998e-02 , 1.29978098656492493e-02 , 1.17670526968566818e-02 , 1.05034991442185931e-02 , 9.21067137680501441e-03 , 7.89217365654073383e-03 , 6.55168315317259525e-03 , 5.19294275049793103e-03 , 3.81976472674378734e-03 , 2.43611958413264247e-03 , 1.04774614227061175e-03 }, + { 9.99605061613717982e-01 , 9.97920262559419124e-01 , 9.94893947611110829e-01 , 9.90533600876299047e-01 , 9.84850894382526376e-01 , 9.77861127919998019e-01 , 9.69583138058211613e-01 , 9.60039238088813751e-01 , 9.49255155405022921e-01 , 9.37259961323449131e-01 , 9.24085992392964850e-01 , 9.09768763081072906e-01 , 8.94346869966131996e-01 , 8.77861887653292872e-01 , 8.60358256677865141e-01 , 8.41883163690677727e-01 , 8.22486414244738562e-01 , 8.02220298524255138e-01 , 7.81139450376972300e-01 , 7.59300700029284847e-01 , 7.36762920880853489e-01 , 7.13586870791539152e-01 , 6.89835028288398933e-01 , 6.65571424134224099e-01 , 6.40861468711630855e-01 , 6.15771775688014666e-01 , 5.90369982436712681e-01 , 5.64724567698472457e-01 , 5.38904666974768243e-01 , 5.12979886150623843e-01 , 4.87020113849376102e-01 , 4.61095333025231702e-01 , 4.35275432301527487e-01 , 4.09630017563287319e-01 , 3.84228224311985334e-01 , 3.59138531288369145e-01 , 3.34428575865775901e-01 , 3.10164971711601012e-01 , 2.86413129208460793e-01 , 2.63237079119146455e-01 , 2.40699299970715125e-01 , 2.18860549623027728e-01 , 1.97779701475744807e-01 , 1.77513585755261466e-01 , 1.58116836309322273e-01 , 1.39641743322134804e-01 , 1.22138112346707156e-01 , 1.05653130033867976e-01 , 9.02312369189271213e-02 , 7.59140076070351777e-02 , 6.27400386765508411e-02 , 5.07448445949770302e-02 , 3.99607619111862211e-02 , 3.04168619417883764e-02 , 2.21388720800019465e-02 , 1.51491056174736325e-02 , 9.46639912370090750e-03 , 5.10605238888914119e-03 , 2.07973744058091324e-03 , 3.94938386281988986e-04 }, { 1.01340598443687923e-03 , 2.35636496347678415e-03 , 3.69496558167272792e-03 , 5.02377859114399184e-03 , 6.33908323840797969e-03 , 7.63730929839239944e-03 , 8.91495050710386025e-03 , 1.01685603647286432e-02 , 1.13947584719989101e-02 , 1.25902388107606237e-02 , 1.37517783749623954e-02 , 1.48762457503944720e-02 , 1.59606095096481646e-02 , 1.70019463624732116e-02 , 1.79974490255422510e-02 , 1.89444337846217219e-02 , 1.98403477261904007e-02 , 2.06827756177923767e-02 , 2.14694464179678197e-02 , 2.21982393978935565e-02 , 2.28671898580572429e-02 , 2.34744944244561007e-02 , 2.40185159099855911e-02 , 2.44977877278784173e-02 , 2.49110178452750901e-02 , 2.52570922662546868e-02 , 2.55350780349278134e-02 , 2.57442257504904674e-02 , 2.58839715874550937e-02 , 2.59539388156103182e-02 , 2.59539388156103182e-02 , 2.58839715874550937e-02 , 2.57442257504904674e-02 , 2.55350780349278134e-02 , 2.52570922662546868e-02 , 2.49110178452750901e-02 , 2.44977877278784173e-02 , 2.40185159099855911e-02 , 2.34744944244561007e-02 , 2.28671898580572429e-02 , 2.21982393978935565e-02 , 2.14694464179678197e-02 , 2.06827756177923767e-02 , 1.98403477261904007e-02 , 1.89444337846217219e-02 , 1.79974490255422510e-02 , 1.70019463624732116e-02 , 1.59606095096481646e-02 , 1.48762457503944720e-02 , 1.37517783749623954e-02 , 1.25902388107606237e-02 , 1.13947584719989101e-02 , 1.01685603647286432e-02 , 8.91495050710386025e-03 , 7.63730929839239944e-03 , 6.33908323840797969e-03 , 5.02377859114399184e-03 , 3.69496558167272792e-03 , 2.35636496347678415e-03 , 1.01340598443687923e-03 }, + { 9.99617798815681691e-01 , 9.97987299907560077e-01 , 9.95058372616258513e-01 , 9.90838005642018516e-01 , 9.85337129416591462e-01 , 9.78570075956492036e-01 , 9.70554493340680557e-01 , 9.61311290691477582e-01 , 9.50864581237000572e-01 , 9.39241618607440487e-01 , 9.26472725423831744e-01 , 9.12591214054329969e-01 , 8.97633299641179772e-01 , 8.81638005586156126e-01 , 8.64647061724732602e-01 , 8.46704795447245528e-01 , 8.27858016047535394e-01 , 8.08155892598960812e-01 , 7.87649825675415305e-01 , 7.66393313251462649e-01 , 7.44441811131126063e-01 , 7.21852588269265794e-01 , 6.98684577362878256e-01 , 6.74998221102033447e-01 , 6.50855314481515346e-01 , 6.26318843584526719e-01 , 6.01452821259029213e-01 , 5.76322120115407621e-01 , 5.50992303281137019e-01 , 5.25529453353987153e-01 , 5.00000000000000000e-01 , 4.74470546646012847e-01 , 4.49007696718862981e-01 , 4.23677879884592323e-01 , 3.98547178740970731e-01 , 3.73681156415473226e-01 , 3.49144685518484654e-01 , 3.25001778897966553e-01 , 3.01315422637121688e-01 , 2.78147411730734206e-01 , 2.55558188868873937e-01 , 2.33606686748537351e-01 , 2.12350174324584695e-01 , 1.91844107401039132e-01 , 1.72141983952464550e-01 , 1.53295204552754416e-01 , 1.35352938275267454e-01 , 1.18361994413843902e-01 , 1.02366700358820173e-01 , 8.74087859456700311e-02 , 7.35272745761682833e-02 , 6.07583813925594851e-02 , 4.91354187629994138e-02 , 3.86887093085223691e-02 , 2.94455066593194252e-02 , 2.14299240435079537e-02 , 1.46628705834085452e-02 , 9.16199435798146014e-03 , 4.94162738374147488e-03 , 2.01270009243988265e-03 , 3.82201184318264138e-04 }, { 9.80726680835141426e-04 , 2.28046200300620859e-03 , 3.57617749587454481e-03 , 4.86273091517806701e-03 , 6.13663175390605220e-03 , 7.39453294246895758e-03 , 8.63314649380687166e-03 , 9.84923887305058990e-03 , 1.10396365741595223e-02 , 1.22012335937721015e-02 , 1.33309992620754443e-02 , 1.44259860440917008e-02 , 1.54833371841986978e-02 , 1.65002941379537062e-02 , 1.74742037582666758e-02 , 1.84025252115774078e-02 , 1.92828366035040846e-02 , 2.01128412954991245e-02 , 2.08903738954442468e-02 , 2.16134059062480476e-02 , 2.22800510175417445e-02 , 2.28885700265729804e-02 , 2.34373753754045337e-02 , 2.39250352925478027e-02 , 2.43502775282057639e-02 , 2.47119926733677941e-02 , 2.50092370540891257e-02 , 2.52412351933987006e-02 , 2.54073818344091699e-02 , 2.55072435193486324e-02 , 2.55405597203931106e-02 , 2.55072435193486324e-02 , 2.54073818344091699e-02 , 2.52412351933987006e-02 , 2.50092370540891257e-02 , 2.47119926733677941e-02 , 2.43502775282057639e-02 , 2.39250352925478027e-02 , 2.34373753754045337e-02 , 2.28885700265729804e-02 , 2.22800510175417445e-02 , 2.16134059062480476e-02 , 2.08903738954442468e-02 , 2.01128412954991245e-02 , 1.92828366035040846e-02 , 1.84025252115774078e-02 , 1.74742037582666758e-02 , 1.65002941379537062e-02 , 1.54833371841986978e-02 , 1.44259860440917008e-02 , 1.33309992620754443e-02 , 1.22012335937721015e-02 , 1.10396365741595223e-02 , 9.84923887305058990e-03 , 8.63314649380687166e-03 , 7.39453294246895758e-03 , 6.13663175390605220e-03 , 4.86273091517806701e-03 , 3.57617749587454481e-03 , 2.28046200300620859e-03 , 9.80726680835141426e-04 }, + { 9.99629929654388460e-01 , 9.98051148158133561e-01 , 9.95214985594645163e-01 , 9.91127974548618340e-01 , 9.85800361685825854e-01 , 9.79245586486963582e-01 , 9.71480200696164253e-01 , 9.62523817818101923e-01 , 9.52399061260546742e-01 , 9.41131506415948671e-01 , 9.28749615756035429e-01 , 9.15284666802002378e-01 , 9.00770673051988213e-01 , 8.85244298027709653e-01 , 8.68744762641578405e-01 , 8.51313746111148517e-01 , 8.32995280667739757e-01 , 8.13835640323442577e-01 , 7.93883223976543650e-01 , 7.73188433150125531e-01 , 7.51803544672377977e-01 , 7.29782578620056688e-01 , 7.07181161858563057e-01 , 6.84056387523282239e-01 , 6.60466670797096977e-01 , 6.36471601348363114e-01 , 6.12131792802082741e-01 , 5.87508729624507842e-01 , 5.62664611807948356e-01 , 5.37662197748117188e-01 , 5.12564645710910316e-01 , 4.87435354289089684e-01 , 4.62337802251882812e-01 , 4.37335388192051588e-01 , 4.12491270375492158e-01 , 3.87868207197917259e-01 , 3.63528398651636830e-01 , 3.39533329202903023e-01 , 3.15943612476717761e-01 , 2.92818838141436999e-01 , 2.70217421379943312e-01 , 2.48196455327622023e-01 , 2.26811566849874441e-01 , 2.06116776023456322e-01 , 1.86164359676557423e-01 , 1.67004719332260271e-01 , 1.48686253888851483e-01 , 1.31255237358421623e-01 , 1.14755701972290347e-01 , 9.92293269480118145e-02 , 8.47153331979975666e-02 , 7.12503842439645430e-02 , 5.88684935840513152e-02 , 4.76009387394532649e-02 , 3.74761821818981253e-02 , 2.85197993038357467e-02 , 2.07544135130364529e-02 , 1.41996383141740970e-02 , 8.87202545138167549e-03 , 4.78501440535482412e-03 , 1.94885184186643348e-03 , 3.70070345611485136e-04 }, { 9.49602839756845244e-04 , 2.20816672846545258e-03 , 3.46302095091548029e-03 , 4.70928971421019377e-03 , 5.94369505850525070e-03 , 7.16309591190325903e-03 , 8.36440589508865781e-03 , 9.54458832928659941e-03 , 1.07006611388349836e-02 , 1.18297036043413968e-02 , 1.29288634770123485e-02 , 1.39953640816573195e-02 , 1.50265112869949341e-02 , 1.60197002908123373e-02 , 1.69724221897052732e-02 , 1.78822703113840700e-02 , 1.87469462911400153e-02 , 1.95642658759815416e-02 , 2.03321644412087221e-02 , 2.10487022051925494e-02 , 2.17120691290237089e-02 , 2.23205894885622064e-02 , 2.28727261072850900e-02 , 2.33670842392077610e-02 , 2.38024150920506175e-02 , 2.41776189817388375e-02 , 2.44917481102589173e-02 , 2.47440089598496456e-02 , 2.49337642974761971e-02 , 2.50605347845216445e-02 , 2.51240001876281392e-02 , 2.51240001876281392e-02 , 2.50605347845216445e-02 , 2.49337642974761971e-02 , 2.47440089598496456e-02 , 2.44917481102589173e-02 , 2.41776189817388375e-02 , 2.38024150920506175e-02 , 2.33670842392077610e-02 , 2.28727261072850900e-02 , 2.23205894885622064e-02 , 2.17120691290237089e-02 , 2.10487022051925494e-02 , 2.03321644412087221e-02 , 1.95642658759815416e-02 , 1.87469462911400153e-02 , 1.78822703113840700e-02 , 1.69724221897052732e-02 , 1.60197002908123373e-02 , 1.50265112869949341e-02 , 1.39953640816573195e-02 , 1.29288634770123485e-02 , 1.18297036043413968e-02 , 1.07006611388349836e-02 , 9.54458832928659941e-03 , 8.36440589508865781e-03 , 7.16309591190325903e-03 , 5.94369505850525070e-03 , 4.70928971421019377e-03 , 3.46302095091548029e-03 , 2.20816672846545258e-03 , 9.49602839756845244e-04 }, + { 9.99641492014561872e-01 , 9.98112006388985007e-01 , 9.95364273446094683e-01 , 9.91404405296863578e-01 , 9.86242017348785027e-01 , 9.79889724879470903e-01 , 9.72363067020504901e-01 , 9.63680460310921583e-01 , 9.53863151389265806e-01 , 9.42935164253926761e-01 , 9.30923241182061822e-01 , 9.17856777159751447e-01 , 9.03767747886728312e-01 , 8.88690631495186123e-01 , 8.72662324158923752e-01 , 8.55722049792422945e-01 , 8.37911264057493055e-01 , 8.19273552910682712e-01 , 7.99854525938812566e-01 , 7.79701704743142487e-01 , 7.58864406645016643e-01 , 7.37393623997402159e-01 , 7.15341899397555769e-01 , 6.92763197106123885e-01 , 6.69712770987292205e-01 , 6.46247029293125719e-01 , 6.22423396622976632e-01 , 5.98300173395753365e-01 , 5.73936393178935966e-01 , 5.49391678223472679e-01 , 5.24726093558079754e-01 , 5.00000000000000000e-01 , 4.75273906441920191e-01 , 4.50608321776527376e-01 , 4.26063606821064034e-01 , 4.01699826604246635e-01 , 3.77576603377023312e-01 , 3.53752970706874281e-01 , 3.30287229012707795e-01 , 3.07236802893876060e-01 , 2.84658100602444175e-01 , 2.62606376002597786e-01 , 2.41135593354983385e-01 , 2.20298295256857485e-01 , 2.00145474061187378e-01 , 1.80726447089317316e-01 , 1.62088735942506945e-01 , 1.44277950207577083e-01 , 1.27337675841076303e-01 , 1.11309368504813835e-01 , 9.62322521132716185e-02 , 8.21432228402485809e-02 , 6.90767588179381359e-02 , 5.70648357460732877e-02 , 4.61368486107342213e-02 , 3.63195396890783964e-02 , 2.76369329794950991e-02 , 2.01102751205290350e-02 , 1.37579826512149884e-02 , 8.59559470313638226e-03 , 4.63572655390526688e-03 , 1.88799361101494581e-03 , 3.58507985438109790e-04 }, { 9.19937297788542101e-04 , 2.13925417343188099e-03 , 3.35514588298006788e-03 , 4.56298433816332803e-03 , 5.75968803844002092e-03 , 6.94230630805780548e-03 , 8.10793920516916962e-03 , 9.25373223008063572e-03 , 1.03768806290195446e-02 , 1.14746355024449662e-02 , 1.25443102766724934e-02 , 1.35832871795489672e-02 , 1.45890236041402634e-02 , 1.55590583111099093e-02 , 1.64910174418896709e-02 , 1.73826203226779379e-02 , 1.82316850427286445e-02 , 1.90361337921747774e-02 , 1.97939979457720482e-02 , 2.05034228798331997e-02 , 2.11626725104079108e-02 , 2.17701335415137961e-02 , 2.23243194129706980e-02 , 2.28238739381463052e-02 , 2.32675746226918487e-02 , 2.36543356561344578e-02 , 2.39832105689975657e-02 , 2.42533945489419242e-02 , 2.44642264102559945e-02 , 2.46151902118737810e-02 , 2.47059165199590910e-02 , 2.47361833119655108e-02 , 2.47059165199590910e-02 , 2.46151902118737810e-02 , 2.44642264102559945e-02 , 2.42533945489419242e-02 , 2.39832105689975657e-02 , 2.36543356561344578e-02 , 2.32675746226918487e-02 , 2.28238739381463052e-02 , 2.23243194129706980e-02 , 2.17701335415137961e-02 , 2.11626725104079108e-02 , 2.05034228798331997e-02 , 1.97939979457720482e-02 , 1.90361337921747774e-02 , 1.82316850427286445e-02 , 1.73826203226779379e-02 , 1.64910174418896709e-02 , 1.55590583111099093e-02 , 1.45890236041402634e-02 , 1.35832871795489672e-02 , 1.25443102766724934e-02 , 1.14746355024449662e-02 , 1.03768806290195446e-02 , 9.25373223008063572e-03 , 8.10793920516916962e-03 , 6.94230630805780548e-03 , 5.75968803844002092e-03 , 4.56298433816332803e-03 , 3.35514588298006788e-03 , 2.13925417343188099e-03 , 9.19937297788542101e-04 }, + { 9.99652520867886030e-01 , 9.98170058385977610e-01 , 9.95506685738372199e-01 , 9.91668126942312989e-01 , 9.86663413894955488e-01 , 9.80504399826026884e-01 , 9.73205687429201438e-01 , 9.64784586065969840e-01 , 9.55261068539251412e-01 , 9.44657722997557014e-01 , 9.32999699077046385e-01 , 9.20314648126290158e-01 , 9.06632657561398769e-01 , 8.91986179471670693e-01 , 8.76409953630265970e-01 , 8.59940925085805441e-01 , 8.42618156527116580e-01 , 8.24482735627328656e-01 , 8.05577677586196583e-01 , 7.85947823101317056e-01 , 7.65639732009947283e-01 , 7.44701572853526450e-01 , 7.23183008626732016e-01 , 7.01135078981995785e-01 , 6.78610079168834091e-01 , 6.55661435995105513e-01 , 6.32343581104383712e-01 , 6.08711821870003500e-01 , 5.84822210211996429e-01 , 5.60731409648060231e-01 , 5.36496560893899521e-01 , 5.12175146331712239e-01 , 4.87824853668287761e-01 , 4.63503439106100479e-01 , 4.39268590351939714e-01 , 4.15177789788003571e-01 , 3.91288178129996445e-01 , 3.67656418895616288e-01 , 3.44338564004894543e-01 , 3.21389920831165965e-01 , 2.98864921018004215e-01 , 2.76816991373267929e-01 , 2.55298427146473494e-01 , 2.34360267990052717e-01 , 2.14052176898682972e-01 , 1.94422322413803361e-01 , 1.75517264372671317e-01 , 1.57381843472883365e-01 , 1.40059074914194587e-01 , 1.23590046369734058e-01 , 1.08013820528329293e-01 , 9.33673424386012168e-02 , 7.96853518737098143e-02 , 6.70003009229535873e-02 , 5.53422770024429439e-02 , 4.47389314607485947e-02 , 3.52154139340302152e-02 , 2.67943125707985931e-02 , 1.94956001739731398e-02 , 1.33365861050445175e-02 , 8.33187305768702188e-03 , 4.49331426162783917e-03 , 1.82994161402236038e-03 , 3.47479132113930294e-04 }, { 8.91640360848216509e-04 , 2.07351663028123396e-03 , 3.25222898448918139e-03 , 4.42337991318197347e-03 , 5.58406973006556409e-03 , 6.73152394835932130e-03 , 7.86301523801235906e-03 , 8.97585788784867160e-03 , 1.00674115767651045e-02 , 1.11350869041916267e-02 , 1.21763512843554370e-02 , 1.31887348575273292e-02 , 1.41698363071297417e-02 , 1.51173285362012390e-02 , 1.60289641774257752e-02 , 1.69025809185708031e-02 , 1.77361066284411929e-02 , 1.85275642701200234e-02 , 1.92750765893078130e-02 , 1.99768705663601713e-02 , 2.06312816213117638e-02 , 2.12367575618267954e-02 , 2.17918622646617252e-02 , 2.22952790818782831e-02 , 2.27458139637090710e-02 , 2.31423982906572082e-02 , 2.34840914081050067e-02 , 2.37700828574151542e-02 , 2.39996942982291551e-02 , 2.41723811174014772e-02 , 2.42877337207517141e-02 , 2.43454785045698618e-02 , 2.43454785045698618e-02 , 2.42877337207517141e-02 , 2.41723811174014772e-02 , 2.39996942982291551e-02 , 2.37700828574151542e-02 , 2.34840914081050067e-02 , 2.31423982906572082e-02 , 2.27458139637090710e-02 , 2.22952790818782831e-02 , 2.17918622646617252e-02 , 2.12367575618267954e-02 , 2.06312816213117638e-02 , 1.99768705663601713e-02 , 1.92750765893078130e-02 , 1.85275642701200234e-02 , 1.77361066284411929e-02 , 1.69025809185708031e-02 , 1.60289641774257752e-02 , 1.51173285362012390e-02 , 1.41698363071297417e-02 , 1.31887348575273292e-02 , 1.21763512843554370e-02 , 1.11350869041916267e-02 , 1.00674115767651045e-02 , 8.97585788784867160e-03 , 7.86301523801235906e-03 , 6.73152394835932130e-03 , 5.58406973006556409e-03 , 4.42337991318197347e-03 , 3.25222898448918139e-03 , 2.07351663028123396e-03 , 8.91640360848216509e-04 }, + }; + + __device__ + void GLget(size_t N, const double** x, const double** w) { + //assert(N>0 && N<=64); + *x = &data[2*(N-1) ][0]; + *w = &data[2*(N-1)+1][0]; + } + + __device__ + void GLget(size_t N, float** x, float** w) { + //assert(N>0 && N<=64); + *x = &fdata[2*(N-1) ][0]; + *w = &fdata[2*(N-1)+1][0]; + } + + } // namespace detail +} diff --git a/examples/madness/mra-device/gl.h b/examples/madness/mra-device/gl.h new file mode 100644 index 000000000..fac468331 --- /dev/null +++ b/examples/madness/mra-device/gl.h @@ -0,0 +1,38 @@ +#ifndef MADGL_H_INCL +#define MADGL_H_INCL + +#include + +#ifdef __CUDA_ARCH__ +#define DEVICE __device__ +#else +#define DEVICE +#endif // __CUDA_ARCH__ + +namespace mra { + + namespace detail { + /// Get the points and weights for the Gauss-Legendre quadrature on [0,1]. x and w should be arrays length at least N. + DEVICE void GLget(size_t N, const double** x, const double** w); + + /// Get the points and weights for the Gauss-Legendre quadrature on [0,1]. x and w should be arrays length at least N. + DEVICE void GLget(size_t N, const float** x, const float** w); + + /// Evaluate the first k Legendre scaling functions. p should be an array of k elements. + void legendre_scaling_functions(double x, size_t k, double *p); + + /// Evaluate the first k Legendre scaling functions. p should be an array of k elements. + void legendre_scaling_functions(float x, size_t k, float *p); + + /// Get the points and weights for the Gauss-Legendre quadrature on [0,1] + template + DEVICE void GLget(const T** x, const T** w, std::size_t N) { + if (!(N>0 && N<=64)) { + throw std::runtime_error("Gauss-Legendre quadrature only available for up to N=64"); + } + GLget(N, x, w); + } + } +} + +#endif diff --git a/examples/madness/mra-device/kernels.cu b/examples/madness/mra-device/kernels.cu new file mode 100644 index 000000000..3bf66278b --- /dev/null +++ b/examples/madness/mra-device/kernels.cu @@ -0,0 +1,294 @@ +#include +#include "tensorview.h" +#include "functionnode.h" +#include "functiondata.h" +#include "gaussian.h" +#include "../../mrakey.h" +#include "../../mradomain.h" + +/// Make outer product of quadrature points for vectorized algorithms +template +__device__ void make_xvec(const TensorView& x, TensorView& xvec, std::integral_constant<1>) { + /* uses threads in 3 dimensions */ + xvec = x; + /* TensorView assignment synchronizes */ +} + +/// Make outer product of quadrature points for vectorized algorithms +template +__device__ void make_xvec(const TensorView& x, TensorView& xvec, std::integral_constant<2>) { + const std::size_t K = x.dim(1); + if (threadId.z == 0) { + for (size_t i=blockIdx.y; i +__device__ void make_xvec(const TensorView& x, TensorView& xvec, std::integral_constant<3>) { + const std::size_t K = x.dim(1); + for (size_t i=threadIdx.z; i +__device__ +void fcube(const functorT& f, + const Key& key, + const T thresh, + // output + TensorView& values, + std::size_t K, + // temporaries + TensorView x, + TensorView xvec) { + if (is_negligible(f,Domain:: template bounding_box(key),truncate_tol(key,thresh))) { + values = 0.0; + /* TensorView assigment synchronizes */ + } + else { + const size_t K = values.dim(0); + const size_t K2NDIM = std::pow(K,NDIM); + mra::FunctionData::make_quadrature_pts(key,x); + + constexpr bool call_coord = std::is_invocable_r>(); // f(coord) + constexpr bool call_1d = (NDIM==1) && std::is_invocable_r(); // f(x) + constexpr bool call_2d = (NDIM==2) && std::is_invocable_r(); // f(x,y) + constexpr bool call_3d = (NDIM==3) && std::is_invocable_r(); // f(x,y,z) + constexpr bool call_vec = std::is_invocable_r, std::array&>(); // vector API + + static_assert(call_coord || call_1d || call_2d || call_3d || call_vec, "no working call"); + + if constexpr (call_1d || call_2d || call_3d || call_vec) { + make_xvec(x, xvec, std::integral_constant{}); + if constexpr (call_vec) { + f(xvec,values.data()); + } + else if constexpr (call_1d || call_2d || call_3d) { + eval_cube_vec(f, xvec, values); + } + } + else if constexpr (call_coord) { + eval_cube(f, x, values); + } + else { + throw "how did we get here?"; + } + __syncthreads(); + } +} + +/* reference implementation, adapted from madness */ +template +__device__ +void mTxmq(std::size_t dimi, std::size_t dimj, std::size_t dimk, + cT* __restrict__ c, const aT* a, const bT* b, std::ssize_t ldb=-1) { + if (ldb == -1) ldb=dimj; + + /* trivial 2D implementation for devices */ + if (threadId.z == 0) { + for (std::size_t i = threadId.y; i < dimi; i += blockDim.y) { + cT* ci = c + i*dimj; // the row of C all threads in dim x work on + const aT *aik_ptr = a; + /* not parallelized */ + for (long k=0; k +__device__ +void transform(const mra::TensorView& t, + const mra::TensorView& c, + mra::TensorView& result, + mra::TensorView& workspace) { + const cT* pc = c.ptr(); + resultT *t0=workspace.ptr(), *t1=result.ptr(); + if (t.ndim() & 0x1) std::swap(t0,t1); + const size_t dimj = c.dim(1); + size_t dimi = 1; + for (size_t n=1; n +__device__ +std::array get_child_slice(mra::Key key, std::size_t K, int child) { + std::array slices; + for (size_t d = 0; d < NDIM) { + int b = (child>>d) & 0x1; + slices[d] = Slice(K*b, K*(b+1)); + } + return slices; +} + +template +__global__ fcoeffs_kernel1( + const Fn f, + mra::Key key, + T* tmp, + const T* phibar_ptr, + std::size_t K, + T thresh) +{ + int tid = threadIdx.x; + int blockid = blockIdx.x; + const std::size_t K2NDIM = std::pow(K, NDIM); + /* reconstruct tensor views from pointers + * make sure we have the values at the same offset (0) as in kernel 1 */ + auto values = mra::TensorView(&tmp[0*K2NDIM], K); + auto r = mra::TensorView(&tmp[1*K2NDIM], K); + auto child_values = mra::TensorView(&tmp[2*K2NDIM], K); + auto workspace = mra::TensorView(&tmp[3*K2NDIM], K); + auto x = mra::TensorView(&tmp[4*K2NDIM], K); + auto x_vec = mra::TensorView(&tmp[5*K2NDIM], NDIM, K2NDIM); + auto phibar = mra::TensorView(phibar_ptr, K, K); + /* compute one child per block */ + if (blockid < (1< child = key.child_at(blockid); + fcube(f, child, thresh, child_values, K, x, xvec); + transform(child_values,phibar,r, K, workspace); + auto child_slice = get_child_slice(key, K, blockid); + values(child_slice) = r; + } +} + +template +__global__ fcoeffs_kernel2( + mra::Key key, + T* coeffs_ptr, + const T* hgT_ptr, + T* tmp, + bool *is_leaf, + std::size_t K, + T thresh) +{ + const int tid = threadDim.x * ((threadDim.y*threadIdx.z) + threadIdx.y) + threadIdx.x; + const std::size_t K2NDIM = std::pow(K, NDIM); + const std::size_t 2K2NDIM = std::pow(2*K, NDIM); + /* reconstruct tensor views from pointers + * make sure we have the values at the same offset (0) as in kernel 1 */ + auto values = mra::TensorView(&tmp[0], K); + auto r = mra::TensorView(&tmp[K2NDIM], 2*K); + auto workspace = mra::TensorView(&tmp[K2NDIM+2K2NDIM], K); + auto hgT = mra::TensorView(hgT_ptr, 2*K, 2*K); + auto coeffs = mra::TensorView(coeffs_ptr, K); + + T fac = std::sqrt(Domain:: template get_volume()*std::pow(T(0.5),T(NDIM*(1+key.level())))); + values *= fac; + // Inlined: filter(values,r); + transform(values, hgT, r, workspace); + + auto child_slice = get_child_slice(key, K, 0); + auto r_slice = r(child_slice); + coeffs = r_slice; // extract sum coeffs + r_slice = 0.0; // zero sum coeffs so can easily compute norm of difference coeffs + /* TensorView assignment synchronizes */ + if (tid == 0) { + /* TODO: compute the norm across threads */ + *is_leaf = (r.normf() < truncate_tol(key,thresh)); // test norm of difference coeffs + } +} + +template +void submit_fcoeffs_kernel( + const Fn* fn, + const mra::Key& key, + mra::TensorView& coeffs_view, + const mra::TensorView& phibar_view, + const mra::TensorView& hgT_view, + T* tmp, + bool* is_leaf_scratch, + cudaStream stream) +{ + /** + * Launch two kernels: one with multiple blocks, one with a single block. + * We use two kernels here because of the synchronization that is required in between + * (i.e., we have to wait for all children to be computed on before moving to the second part) + * TODO: We could batch these together into a graph that is launched at once. + * Alternatively, we could call the second kernel from the first + */ + + const std::size_t K = coeffs_view.dim(0); + dim3 thread_dims = dim3(1); + if constexpr (NDIM >= 3) { + thread_dims = dim3(K, K, K); + } else if constexpr (NDIM == 2) { + thread_dims = dim3(K, K, 1); + } else if constexpr (NDIM == 1) { + thread_dims = dim3(K, 1, 1); + } + + /* launch one block per child */ + coeffs_kernel1<<>>( + fn, key, tmp, phibar_view.data(), K, thresh); + /* launch one block only */ + coeffs_kernel2<<<1, thread_dims, 0, stream>>>( + key, coeffs_view.data(), hgT_view.data(), + is_leaf_scratch, K, thresh); +} + +/** + * Instantiate for 1, 2, 3 dimensional Gaussian + */ + + template + void submit_fcoeffs_kernel, double, 1>( + const mra::Gaussian* fn, + const mra::Key<1>& key, + mra::TensorView& coeffs_view, + const mra::TensorView& phibar_view, + const mra::TensorView& hgT_view, + double* tmp, + bool* is_leaf_scratch, + cudaStream stream); + + + template + void submit_fcoeffs_kernel, double, 2>( + const mra::Gaussian* fn, + const mra::Key<2>& key, + mra::TensorView& coeffs_view, + const mra::TensorView& phibar_view, + const mra::TensorView& hgT_view, + double* tmp, + bool* is_leaf_scratch, + cudaStream stream); + + template + void submit_fcoeffs_kernel, double, 3>( + const mra::Gaussian* fn, + const mra::Key<3>& key, + mra::TensorView& coeffs_view, + const mra::TensorView& phibar_view, + const mra::TensorView& hgT_view, + double* tmp, + bool* is_leaf_scratch, + cudaStream stream); diff --git a/examples/madness/mra-device/kernels.h b/examples/madness/mra-device/kernels.h new file mode 100644 index 000000000..e26c27038 --- /dev/null +++ b/examples/madness/mra-device/kernels.h @@ -0,0 +1,34 @@ +#ifndef HAVE_KERNELS_H +#define HAVE_KERNELS_H + +#include +#include "gaussian.h" +#include "tensorview.h" +#include "../../mrakey.h" + +#ifndef __CUDA_ARCH__ +typedef int cudaStream; +#endif + +/* Returns the total size of temporary memory needed for + * the project() kernel. */ +template +std::size_t project_tmp_size(std::size_t K) { + const size_t K2NDIM = std::pow(K,NDIM); + return (NDIM*K2NDIM) // xvec in fcube + + (5*K2NDIM); // x in fcube, workspace in transform, values, child_values, r +} + +/* Explicitly instantiated for 1, 2, 3 dimensional Gaussians */ +template +void submit_fcoeffs_kernel( + const Fn* fn, + const mra::Key& key, + mra::TensorView& coeffs_view, + const mra::TensorView& phibar_view, + const mra::TensorView& hgT_view, + T* tmp, + bool* is_leaf_scratch, + cudaStream stream); + +#endif // HAVE_KERNELS_H \ No newline at end of file diff --git a/examples/madness/mra-device/mrattg-device.cc b/examples/madness/mra-device/mrattg-device.cc new file mode 100644 index 000000000..be5072eaa --- /dev/null +++ b/examples/madness/mra-device/mrattg-device.cc @@ -0,0 +1,130 @@ +#include +#include "tensor.h" +#include "tensorview.h" +#include "functionnode.h" +#include "functiondata.h" +#include "kernels.h" +#include "gaussian.h" +#include "functionfunctor.h" +#include "../../mrakey.h" + +/// Project the scaling coefficients using screening and test norm of difference coeffs. Return true if difference coeffs negligible. +template +static bool fcoeffs( + const ttg::Buffer& f, + const mra::FunctionData& functiondata, + const mra::Key& key, + const T thresh, + mra::Tensor& coeffs) +{ + bool status; + + if (mra::is_negligible(*f.host_ptr(),mra::Domain:: template bounding_box(key),truncate_tol(key,thresh))) { + coeffs = 0.0; + status = true; + } + else { + + /* global function data */ + // TODO: need to make our own FunctionData with dynamic K + const auto& phibar = functiondata.get_phibar(); + const auto& hgT = functiondata.get_hgT(); + + const std::size_t K = coeffs.dim(0); + + /* temporaries */ + bool is_leaf; + auto is_leaf_scratch = ttg::make_scratch(&is_leaf, ttg::scope::Allocate); + const std::size_t tmp_size = project_tmp_size(K); + T* tmp = new T[tmp_size]; // TODO: move this into make_scratch() + auto tmp_scratch = ttg::make_scratch(tmp, ttg::scope::Allocate, tmp_size); + + /* TODO: cannot do this from a function, need to move it into the main task */ + co_await ttg::device::select(f, coeffs.buffer(), phibar.buffer(), hgT.buffer(), tmp, is_leaf_scratch); + auto coeffs_view = coeffs.current_view(); + auto phibar_view = phibar.current_view(); + auto hgT_view = hgT.current_view(); + T* tmp_device = tmp_scratch.device_ptr(); + bool *is_leaf_device = is_leaf_scratch.device_ptr(); + FnT* f_ptr = f.current_device_ptr(); + + /* submit the kernel */ + submit_fcoeffs_kernel(f_ptr, key, coeffs_view, phibar_view, hgT_view, tmp_device, + is_leaf_device, ttg::device::current_stream()); + + /* wait and get is_leaf back */ + co_await ttg::device::wait(is_leaf_scratch); + status = is_leaf; + /* todo: is this safe? */ + delete[] tmp; + } + co_return status; +} + +template +auto make_project( + ttg::Buffer& f, + const mra::FunctionData& functiondata, + const T thresh, /// should be scalar value not complex + ttg::Edge, void> control, + ttg::Edge, mra::Tensor> result) +{ + + auto fn = [&](const mra::Key& key) -> ttg::device::Task { + using tensor_type = typename mra::Tensor; + using key_type = typename mra::Key; + using node_type = typename mra::FunctionReconstructedNode; + node_type result; + tensor_type& coeffs = result.coeffs; + + if (key.level() < initial_level(f)) { + std::vector> bcast_keys; + /* TODO: children() returns an iteratable object but broadcast() expects a contiguous memory range. + We need to fix broadcast to support any ranges */ + for (auto child : children(key)) bcast_keys.push_back(child); + ttg::broadcastk<0>(bcast_keys); + coeffs.current_view() = T(1e7); // set to obviously bad value to detect incorrect use + result.is_leaf = false; + } + else if (mra::is_negligible(*f.host_ptr(), mra::Domain:: template bounding_box(key), mra::truncate_tol(key,thresh))) { + /* zero coeffs */ + coeffs.current_view() = T(0.0); + result.is_leaf = true; + } + else { + /* here we actually compute: first select a device */ + result.is_leaf = fcoeffs(f, functiondata, key, thresh, coeffs); + if (!result.is_leaf) { + std::vector> bcast_keys; + for (auto child : children(key)) bcast_keys.push_back(child); + ttg::broadcastk<0>(bcast_keys); + } + } + ttg::send<1>(key, std::move(result)); // always produce a result + }; + + return ttg::make_tt(std::move(fn), ttg::edges(control), ttg::edges(result)); +} + +template +void test(std::size_t K) { + auto functiondata = mra::FunctionData(K); + mra::Domain::set_cube(-6.0,6.0); + + ttg::Edge, void> project_control; + ttg::Edge, mra::Tensor> project_result; + + // define a Gaussian + auto gaussian = mra::Gaussian(T(3.0), {T(0.0),T(0.0),T(0.0)}); + // put it into a buffer + auto gauss_buffer = ttg::Buffer>(&gaussian); + auto project = make_project(gauss_buffer, functiondata, T(1e-6), project_control, project_result); +} + +int main(int argc, char **argv) { + ttg::initialize(argc, argv); + + test(10); + + ttg::finalize(); +} \ No newline at end of file diff --git a/examples/madness/mra-device/tensor.h b/examples/madness/mra-device/tensor.h index 48b20be10..3b4887a4c 100644 --- a/examples/madness/mra-device/tensor.h +++ b/examples/madness/mra-device/tensor.h @@ -11,7 +11,7 @@ namespace mra { - template> + template> class Tensor : public ttg::TTValue> { public: using value_type = std::decay_t; @@ -20,7 +20,7 @@ namespace mra { using view_type = TensorView; using buffer_type = ttg::Buffer; - static constexpr int ndim() { return NDIM; } + static constexpr Dimension ndim() { return NDIM; } using dims_array_t = std::array; @@ -35,6 +35,8 @@ namespace mra { } public: + Tensor() = default; + template Tensor(Dims... dims) : ttvalue_type() @@ -81,6 +83,14 @@ namespace mra { return m_buffer; } + value_type* data() { + return m_buffer.host_ptr(); + } + + const value_type* data() const { + return m_buffer.host_ptr(); + } + /* returns a view for the current memory space */ view_type current_view() { return view_type(m_buffer.current_device_ptr(), m_dims); diff --git a/examples/madness/mra-device/tensorview.h b/examples/madness/mra-device/tensorview.h index 7df47c43c..41398e820 100644 --- a/examples/madness/mra-device/tensorview.h +++ b/examples/madness/mra-device/tensorview.h @@ -7,6 +7,8 @@ #include +#include "../../mratypes.h" + namespace mra { class Slice { @@ -60,7 +62,7 @@ namespace mra { }; // Slice - template + template class TensorView { public: using value_type = std::decay_t; @@ -77,10 +79,12 @@ namespace mra { return idx; } else { return idx*std::reduce(&m_dims[I+1], &m_dims[ndim()], 1, std::multiplies{}) - + offset_impl(std::forward(idxs...)); + + offset_impl(std::forward(idxs)...); } } + /* TODO: unused right now, should be used to condense N dimensions down to 3 for devices */ +#if 0 template void last_level_op_helper(Fn&& fn, std::index_sequence, Args... args) { if constexpr (sizeof...(Is) == 0) { @@ -92,6 +96,58 @@ namespace mra { } } } +#endif // 0 + + template + void foreach_idx(Fn&& fn) { + static_assert(ndim() <= 3, "Missing implementation of operator= for NDIM>3"); +#ifdef __CUDA_ARCH__ + /* let's start simple: iterate sequentially over all but the fastest dimension and use threads in the last + * dimension to do the assignment in parallel. This should be revisited later.*/ + static_assert(ndim() <= 3, "Missing implementation of operator= for NDIM>3"); + if constexpr(ndim() == 3) { + for (std::size_t i = threadIdx.z; i < dims(0); i += blockDim.z) { + for (std::size_t j = threadIdx.y; j < dims(1); j += blockDim.y) { + for (std::size_t k = threadIdx.x; k < dims(2); k += blockDim.x) { + fn(i, j, k); + } + } + } + } else if constexpr (ndim() == 2) { + for (std::size_t i = threadIdx.z*blockDim.y + threadIdx.y; i < dims(0); i += blockDim.z*blockDim.y) { + for (std::size_t j = threadIdx.x; j < dims(1); j += blockDim.x) { + fn(i, j); + } + } + } else if constexpr(ndim() == 1) { + int tid = threadDim.x * ((threadDim.y*threadIdx.z) + threadIdx.y) + threadIdx.x; + for (size_t i = tid; i < dim(0); i += blockDim.x*blockDim.y*blockDim.z) { + fn(i); + } + } + __syncthreads(); +#else // __CUDA_ARCH__ + if constexpr(ndim() ==3) { + for (int i = 0; i < dim(0); ++i) { + for (int j = 0; j < dim(1); ++j) { + for (int k = 0; k < dim(2); ++k) { + fn(i, j, k); + } + } + } + } else if constexpr (ndim() ==2) { + for (int i = 0; i < dim(0); ++i) { + for (int j = 0; j < dim(1); ++j) { + fn(i, j); + } + } + } else if constexpr (ndim() ==1) { + for (int i = 0; i < dim(0); ++i) { + fn(i); + } + } +#endif // __CUDA_ARCH__ + } void reset(value_type *ptr, dims_array_t dims) { @@ -105,8 +161,12 @@ namespace mra { : m_dims({dims...}) , m_ptr(ptr) { - static_assert(sizeof...(Dims) == NDIM, - "Number of arguments does not match number of Dimensions."); + static_assert(sizeof...(Dims) == NDIM || sizeof...(Dims) == 1, + "Number of arguments does not match number of Dimensions. " + "A single argument for all dimensions may be provided."); + if constexpr (sizeof...(Dims) != m_dims.size()) { + std::fill(m_dims.begin(), m_dims.end(), dims...); + } } TensorView(value_type *ptr, const dims_array_t& dims) @@ -186,80 +246,28 @@ namespace mra { } /// Fill with scalar - /// Device: assumes this operation is called by all threads in a block + /// Device: assumes this operation is called by all threads in a block, synchronizes /// Host: assumes this operation is called by a single CPU thread TensorView& operator=(const value_type& value) { -#ifdef __CUDA_ARCH__ - /* let's start simple: iterate sequentially over all but the fastest dimension and use threads in the last - * dimension to do the assignment in parallel. This should be revisited later.*/ - auto assign = [&](auto... args){ - /* last dimension, do assignment */ - int tid = threadIdx.x + blockDim.x * threadIdx.y; - for (int i = tid; i < m_dims[ndim()-1]; i += blockDim.x*blockDim.y) { - this->operator()(args..., i) = value; - } - }; -#else // __CUDA_ARCH__ - auto assign = [&](auto... args){ - /* last dimension, do assignment */ - for (int i = 0; i < m_dims[ndim()-1]; ++i) { - this->operator()(args..., i) = value; - } - }; -#endif // __CUDA_ARCH__ - last_level_op_helper(assign, std::make_index_sequence{}); + foreach_idx([&](auto... args){ this->operator()(args...) = value; }); return *this; } /// Scale by scalar - /// Device: assumes this operation is called by all threads in a block + /// Device: assumes this operation is called by all threads in a block, synchronizes /// Host: assumes this operation is called by a single CPU thread TensorView& operator*=(const value_type& value) { -#ifdef __CUDA_ARCH__ - /* let's start simple: iterate sequentially over all but the fastest dimension and use threads in the last - * dimension to do the assignment in parallel. This should be revisited later.*/ - auto assign = [&](auto... args){ - /* last dimension, do assignment */ - int tid = threadIdx.x + blockDim.x * threadIdx.y; - for (int i = tid; i < m_dims[ndim()-1]; i += blockDim.x*blockDim.y) { - this->operator()(args..., i) *= value; - } - }; -#else // __CUDA_ARCH__ - auto assign = [&](auto... args){ - /* last dimension, do assignment */ - for (int i = 0; i < m_dims[ndim()-1]; ++i) { - this->operator()(args..., i) *= value; - } - }; -#endif // __CUDA_ARCH__ - last_level_op_helper(assign, std::make_index_sequence{}); + foreach_idx([&](auto... args){ this->operator()(args...) *= value; }); return *this; } /// Copy into patch - /// Device: assumes this operation is called by all threads in a block + /// Device: assumes this operation is called by all threads in a block, synchronizes /// Host: assumes this operation is called by a single CPU thread template typename std::enable_if::type operator=(const otherT& other) { -#ifdef __CUDA_ARCH__ - auto assign = [&](auto... args){ - /* last dimension, do assignment */ - int tid = threadIdx.x + blockDim.x * threadIdx.y; - for (int i = tid; i < m_dims[ndim()-1]; i += blockDim.x*blockDim.y) { - this->operator()(args..., i) = other(args..., i); - } - }; -#else // __CUDA_ARCH__ - auto assign = [&](auto... args){ - /* last dimension, do assignment */ - for (int i = 0; i < m_dims[ndim()-1]; ++i) { - this->operator()(args..., i) = other(args..., i); - } - }; -#endif // __CUDA_ARCH__ - last_level_op_helper(assign, std::make_index_sequence{}); + foreach_idx([&](auto... args){ this->operator()(args...) = other(args...); }); return *this; } @@ -277,7 +285,7 @@ namespace mra { using view_type = TensorViewT; using value_type = typename view_type::value_type; - static constexpr int ndim() { return TensorViewT::ndim(); } + static constexpr Dimension ndim() { return TensorViewT::ndim(); } static constexpr bool is_tensor() { return true; } @@ -308,6 +316,59 @@ namespace mra { } } + /* Same as for TensorView but on different counts. + * TODO: Can we merge them? */ + template + void foreach_idx(Fn&& fn) { + static_assert(ndim() <= 3, "Missing implementation of operator= for NDIM>3"); +#ifdef __CUDA_ARCH__ + /* let's start simple: iterate sequentially over all but the fastest dimension and use threads in the last + * dimension to do the assignment in parallel. This should be revisited later.*/ + static_assert(ndim() <= 3, "Missing implementation of operator= for NDIM>3"); + if constexpr(ndim() == 3) { + for (std::size_t i = threadIdx.z; i < m_slices[0].count; i += blockDim.z) { + for (std::size_t j = threadIdx.y; j < m_slices[1].count; j += blockDim.y) { + for (std::size_t k = threadIdx.x; k < m_slices[2].count; k += blockDim.x) { + fn(i, j, k); + } + } + } + } else if constexpr (ndim() == 2) { + for (std::size_t i = threadIdx.z*blockDim.y + threadIdx.y; i < m_slices[0].count; i += blockDim.z*blockDim.y) { + for (std::size_t j = threadIdx.x; j < m_slices[1].count; j += blockDim.x) { + fn(i, j); + } + } + } else if constexpr(ndim() == 1) { + int tid = threadDim.x * ((threadDim.y*threadIdx.z) + threadIdx.y) + threadIdx.x; + for (size_t i = tid; i < m_slices[0].count; i += blockDim.x*blockDim.y*blockDim.z) { + fn(i); + } + } + __syncthreads(); +#else // __CUDA_ARCH__ + if constexpr(ndim() ==3) { + for (int i = 0; i < m_slices[0].count; ++i) { + for (int j = 0; j < m_slices[1].count; ++j) { + for (int k = 0; k < m_slices[2].count; ++k) { + fn(i, j, k); + } + } + } + } else if constexpr (ndim() ==2) { + for (int i = 0; i < m_slices[0].count; ++i) { + for (int j = 0; j < m_slices[1].count; ++j) { + fn(i, j); + } + } + } else if constexpr (ndim() ==1) { + for (int i = 0; i < m_slices[1].count; ++i) { + fn(i); + } + } +#endif // __CUDA_ARCH__ + } + public: TensorSlice() = delete; // slice is useless without a view @@ -387,25 +448,7 @@ namespace mra { template > typename std::enable_if,X&>::type operator=(const value_type& value) { -#ifdef __CUDA_ARCH__ - /* let's start simple: iterate sequentially over all but the fastest dimension and use threads in the last - * dimension to do the assignment in parallel. This should be revisited later.*/ - auto assign = [&](auto... args){ - /* last dimension, do assignment */ - int tid = threadIdx.x + blockDim.x * threadIdx.y; - for (int i = tid; i < m_slices[ndim()-1].count; i += blockDim.x*blockDim.y) { - this->operator()(args..., i) = value; - } - }; -#else // __CUDA_ARCH__ - auto assign = [&](auto... args){ - /* last dimension, do assignment */ - for (int i = 0; i < m_slices[ndim()-1].count; ++i) { - this->operator()(args..., i) = value; - } - }; -#endif // __CUDA_ARCH__ - last_level_op_helper(assign, std::make_index_sequence{}); + foreach_idx([&](auto... args){ this->operator()(args...) = value; }); return *this; } @@ -415,25 +458,7 @@ namespace mra { template > typename std::enable_if,X&>::type operator*=(const value_type& value) { -#ifdef __CUDA_ARCH__ - /* let's start simple: iterate sequentially over all but the fastest dimension and use threads in the last - * dimension to do the assignment in parallel. This should be revisited later.*/ - auto assign = [&](auto... args){ - /* last dimension, do assignment */ - int tid = threadIdx.x + blockDim.x * threadIdx.y; - for (int i = tid; i < m_slices[ndim()-1].count; i += blockDim.x*blockDim.y) { - this->operator()(args..., i) *= value; - } - }; -#else // __CUDA_ARCH__ - auto assign = [&](auto... args){ - /* last dimension, do assignment */ - for (int i = 0; i < m_slices[ndim()-1].count; ++i) { - this->operator()(args..., i) *= value; - } - }; -#endif // __CUDA_ARCH__ - last_level_op_helper(assign, std::make_index_sequence{}); + foreach_idx([&](auto... args){ this->operator()(args...) *= value; }); return *this; } @@ -442,23 +467,7 @@ namespace mra { /// Host: assumes this operation is called by a single CPU thread typename std::enable_if,TensorSlice&>::type operator=(const TensorSlice& other) { -#ifdef __CUDA_ARCH__ - auto assign = [&](auto... args){ - /* last dimension, do assignment */ - int tid = threadIdx.x + blockDim.x * threadIdx.y; - for (int i = tid; i < m_slices[ndim()-1].count; i += blockDim.x*blockDim.y) { - this->operator()(args..., i) = other(args..., i); - } - }; -#else // __CUDA_ARCH__ - auto assign = [&](auto... args){ - /* last dimension, do assignment */ - for (int i = 0; i < m_slices[ndim()-1].count; ++i) { - this->operator()(args..., i) = other(args..., i); - } - }; -#endif // __CUDA_ARCH__ - last_level_op_helper(assign, std::make_index_sequence{}); + foreach_idx([&](auto... args){ this->operator()(args...) = other(args...); }); return *this; } }; diff --git a/examples/mrafunctiondata.h b/examples/mrafunctiondata.h index 307fc6efc..a8b506f00 100644 --- a/examples/mrafunctiondata.h +++ b/examples/mrafunctiondata.h @@ -86,7 +86,7 @@ namespace mra { static void initialize() { make_phi(phi); make_phibar(phibar); - twoscale_get(HG); + twoscale_get(K, HG.ptr()); for (size_t i : range(2*K)) { for (size_t j : range(2*K)) { HGT(j,i) = HG(i,j); diff --git a/examples/mrakey.h b/examples/mrakey.h index c21e9c8b2..9c500e2da 100644 --- a/examples/mrakey.h +++ b/examples/mrakey.h @@ -19,12 +19,12 @@ namespace mra { private: Level n; // = 0; cannot default initialize if want to be POD std::array l; // = {}; ditto - HashValue hashvalue; // = 0; ditto - + /// Refreshes the hash value. Note that the default std::hash does not mix enough - void rehash() { - hashvalue = n; + HashValue rehash() const { + HashValue hashvalue = n; for (Dimension d=0; d&& key) = default; /// Construct from level and translation - Key(Level n, const std::array& l) : n(n), l(l) {rehash();} - + Key(Level n, const std::array& l) : n(n), l(l) + { } + /// Assignment default is OK Key& operator=(const Key& other) = default; @@ -50,7 +51,7 @@ namespace mra { /// Equality bool operator==(const Key& other) const { - if (hashvalue != other.hashvalue) { + if (rehash() != other.rehash()) { return false; } else { @@ -64,8 +65,8 @@ namespace mra { bool operator!=(const Key& other) const {return !(*this == other);} /// Hash to unsigned value - HashValue hash() const {return hashvalue;} - + HashValue hash() const {return rehash();} + /// Level (n = 0, 1, 2, ...) Level level() const {return n;} @@ -119,22 +120,16 @@ namespace mra { for (Dimension d=NDIM-1; d>0; d--) b = (b<<1) | low_bit(l[d-1]); return b; } + + /// Return the Key of the child at position idx \in [0, 1< child_at(size_t& idx) { + assert(n l = this->l; + for (auto d : range(NDIM)) l[d] = 2*l[d] + (idx & (1<(2*n, l); + } }; - - // Specializations for dubuoius efficiency gains except perhaps for NDIM=1 - - template <> inline void Key<1>::rehash() { - hashvalue = mulhash(HashValue(n),l[0]); - } - - template <> inline void Key<2>::rehash() { - hashvalue = mulhash(mulhash(HashValue(n),l[0]),l[1]); - } - - template <> inline void Key<3>::rehash() { - hashvalue = mulhash(mulhash(mulhash(HashValue(n),l[0]),l[1]),l[2]); - } - template <> inline Key<1> Key<1>::parent(Level generation) const { generation = std::min(generation,n); return Key<1>(n-generation,{l[0]>>generation}); diff --git a/examples/mratwoscale.h b/examples/mratwoscale.h index a8b5e6e46..2f9a9372a 100644 --- a/examples/mratwoscale.h +++ b/examples/mratwoscale.h @@ -1,8 +1,6 @@ #ifndef MAD_TWOSCALE_H_INCL #define MAD_TWOSCALE_H_INCL -#include "mrasimpletensor.h" - namespace mra { namespace detail { @@ -16,9 +14,9 @@ namespace mra { } /// Get the multiwavelet twoscale coefficients of order K (1<=K<=60) and either double or float - template - void twoscale_get(FixedTensor& H) { - detail::twoscale_get(K, H.ptr()); + template + void twoscale_get(size_t k, T* p) { + detail::twoscale_get(k, p); } } diff --git a/ttg/ttg/parsec/buffer.h b/ttg/ttg/parsec/buffer.h index 6e609a158..0babdebc8 100644 --- a/ttg/ttg/parsec/buffer.h +++ b/ttg/ttg/parsec/buffer.h @@ -47,8 +47,8 @@ struct Buffer : public detail::ttg_parsec_data_wrapper_t static_assert(std::is_trivially_copyable_v, "Only trivially copyable types are supported for devices."); - static_assert(std::is_default_constructible_v, - "Only default constructible types are supported for devices."); + //static_assert(std::is_default_constructible_v, + // "Only default constructible types are supported for devices."); private: using delete_fn_t = std::function; @@ -79,6 +79,7 @@ struct Buffer : public detail::ttg_parsec_data_wrapper_t Buffer() : Buffer(nullptr, 0) { } + /* allocates n elements, unitialized */ Buffer(std::size_t n) : ttg_parsec_data_wrapper_t() , allocator_type() From 9f2c8ed991d52de331e8f3b902fbf54d55178030 Mon Sep 17 00:00:00 2001 From: Joseph Schuchart Date: Thu, 25 Jul 2024 20:12:47 -0400 Subject: [PATCH 11/13] Inline fcoeffs into make_project and fix compile errors Signed-off-by: Joseph Schuchart --- examples/madness/mra-device/functionnode.h | 16 +++---- examples/madness/mra-device/kernels.cu | 22 +++++----- examples/madness/mra-device/kernels.h | 4 +- examples/madness/mra-device/mrattg-device.cc | 46 +++++++++++++++++++- examples/madness/mra-device/tensor.h | 20 +++++++-- examples/madness/mra-device/tensorview.h | 11 ++--- 6 files changed, 88 insertions(+), 31 deletions(-) diff --git a/examples/madness/mra-device/functionnode.h b/examples/madness/mra-device/functionnode.h index b64e513ea..b2514f4bc 100644 --- a/examples/madness/mra-device/functionnode.h +++ b/examples/madness/mra-device/functionnode.h @@ -52,11 +52,11 @@ namespace mra { } template - void distancesq(const Coordinate& p, const TensorView& q, T* rsq, std::size_t N) { + void distancesq(const Coordinate& p, const TensorView& q, T* rsq, std::size_t N) { const T x = p(0); #ifdef __CUDA_ARCH__ - int tid = threadIdx.x*blockDim.x + threadIdx.y; - for (size_t i = tid; i < N; i += blockDim.x*blockDim.y) { + int tid = threadDim.x * ((threadDim.y*threadIdx.z) + threadIdx.y) + threadIdx.x; + for (size_t i = tid; i < N; i += blockDim.x*blockDim.y*blockDim.z) { T xx = q(0,i) - x; rsq[i] = xx*xx; } @@ -73,8 +73,8 @@ namespace mra { const T x = p(0); const T y = p(1); #ifdef __CUDA_ARCH__ - int tid = threadIdx.x*blockDim.x + threadIdx.y; - for (size_t i = tid; i < N; i += blockDim.x*blockDim.y) { + int tid = threadDim.x * ((threadDim.y*threadIdx.z) + threadIdx.y) + threadIdx.x; + for (size_t i = tid; i < N; i += blockDim.x*blockDim.y*blockDim.z) { T xx = q(0,i) - x; T yy = q(1,i) - y; rsq[i] = xx*xx + yy*yy; @@ -89,13 +89,13 @@ namespace mra { } template - void distancesq(const Coordinate& p, const TensorView& q, T* rsq, std::size_t N) { + void distancesq(const Coordinate& p, const TensorView& q, T* rsq, std::size_t N) { const T x = p(0); const T y = p(1); const T z = p(2); #ifdef __CUDA_ARCH__ - int tid = threadIdx.x*blockDim.x + threadIdx.y; - for (size_t i = tid; i < N; i += blockDim.x*blockDim.y) { + int tid = threadDim.x * ((threadDim.y*threadIdx.z) + threadIdx.y) + threadIdx.x; + for (size_t i = tid; i < N; i += blockDim.x*blockDim.y*blockDim.z) { T xx = q(0,i) - x; T yy = q(1,i) - y; T zz = q(2,i) - z; diff --git a/examples/madness/mra-device/kernels.cu b/examples/madness/mra-device/kernels.cu index 3bf66278b..e5e265904 100644 --- a/examples/madness/mra-device/kernels.cu +++ b/examples/madness/mra-device/kernels.cu @@ -8,7 +8,7 @@ /// Make outer product of quadrature points for vectorized algorithms template -__device__ void make_xvec(const TensorView& x, TensorView& xvec, std::integral_constant<1>) { +__device__ void make_xvec(const mra::TensorView& x, mra::TensorView& xvec, std::integral_constant<1>) { /* uses threads in 3 dimensions */ xvec = x; /* TensorView assignment synchronizes */ @@ -16,7 +16,7 @@ __device__ void make_xvec(const TensorView& x, TensorView& xvec, std:: /// Make outer product of quadrature points for vectorized algorithms template -__device__ void make_xvec(const TensorView& x, TensorView& xvec, std::integral_constant<2>) { +__device__ void make_xvec(const mra::TensorView& x, mra::TensorView& xvec, std::integral_constant<2>) { const std::size_t K = x.dim(1); if (threadId.z == 0) { for (size_t i=blockIdx.y; i& x, TensorView& xvec, std:: /// Make outer product of quadrature points for vectorized algorithms template -__device__ void make_xvec(const TensorView& x, TensorView& xvec, std::integral_constant<3>) { +__device__ void make_xvec(const mra::TensorView& x, mra::TensorView& xvec, std::integral_constant<3>) { const std::size_t K = x.dim(1); for (size_t i=threadIdx.z; i& x, TensorView& xvec, std:: } -template +template __device__ void fcube(const functorT& f, - const Key& key, + const mra::Key& key, const T thresh, // output - TensorView& values, + mra::TensorView& values, std::size_t K, // temporaries - TensorView x, - TensorView xvec) { + mra::TensorView x, + mra::TensorView xvec) { if (is_negligible(f,Domain:: template bounding_box(key),truncate_tol(key,thresh))) { values = 0.0; /* TensorView assigment synchronizes */ @@ -149,7 +149,7 @@ std::array get_child_slice(mra::Key key, std::size_t K, return slices; } -template +template __global__ fcoeffs_kernel1( const Fn f, mra::Key key, @@ -180,7 +180,7 @@ __global__ fcoeffs_kernel1( } } -template +template __global__ fcoeffs_kernel2( mra::Key key, T* coeffs_ptr, @@ -217,7 +217,7 @@ __global__ fcoeffs_kernel2( } } -template +template void submit_fcoeffs_kernel( const Fn* fn, const mra::Key& key, diff --git a/examples/madness/mra-device/kernels.h b/examples/madness/mra-device/kernels.h index e26c27038..51f38e6ca 100644 --- a/examples/madness/mra-device/kernels.h +++ b/examples/madness/mra-device/kernels.h @@ -12,7 +12,7 @@ typedef int cudaStream; /* Returns the total size of temporary memory needed for * the project() kernel. */ -template +template std::size_t project_tmp_size(std::size_t K) { const size_t K2NDIM = std::pow(K,NDIM); return (NDIM*K2NDIM) // xvec in fcube @@ -20,7 +20,7 @@ std::size_t project_tmp_size(std::size_t K) { } /* Explicitly instantiated for 1, 2, 3 dimensional Gaussians */ -template +template void submit_fcoeffs_kernel( const Fn* fn, const mra::Key& key, diff --git a/examples/madness/mra-device/mrattg-device.cc b/examples/madness/mra-device/mrattg-device.cc index be5072eaa..477a4f8e8 100644 --- a/examples/madness/mra-device/mrattg-device.cc +++ b/examples/madness/mra-device/mrattg-device.cc @@ -8,6 +8,7 @@ #include "functionfunctor.h" #include "../../mrakey.h" +#if 0 /// Project the scaling coefficients using screening and test norm of difference coeffs. Return true if difference coeffs negligible. template static bool fcoeffs( @@ -60,6 +61,7 @@ static bool fcoeffs( } co_return status; } +#endif // 0 template auto make_project( @@ -93,7 +95,49 @@ auto make_project( } else { /* here we actually compute: first select a device */ - result.is_leaf = fcoeffs(f, functiondata, key, thresh, coeffs); + //result.is_leaf = fcoeffs(f, functiondata, key, thresh, coeffs); + /** + * BEGIN FCOEFFS HERE + * TODO: figure out a way to outline this into a function or coroutine + */ + + /* global function data */ + // TODO: need to make our own FunctionData with dynamic K + const auto& phibar = functiondata.get_phibar(); + const auto& hgT = functiondata.get_hgT(); + + const std::size_t K = coeffs.dim(0); + + /* temporaries */ + bool is_leaf; + auto is_leaf_scratch = ttg::make_scratch(&is_leaf, ttg::scope::Allocate); + const std::size_t tmp_size = project_tmp_size(K); + T* tmp = new T[tmp_size]; // TODO: move this into make_scratch() + auto tmp_scratch = ttg::make_scratch(tmp, ttg::scope::Allocate, tmp_size); + + /* TODO: cannot do this from a function, need to move it into the main task */ + co_await ttg::device::select(f, coeffs.buffer(), phibar.buffer(), + hgT.buffer(), tmp_scratch, is_leaf_scratch); + auto coeffs_view = coeffs.current_view(); + auto phibar_view = phibar.current_view(); + auto hgT_view = hgT.current_view(); + T* tmp_device = tmp_scratch.device_ptr(); + bool *is_leaf_device = is_leaf_scratch.device_ptr(); + FnT* f_ptr = f.current_device_ptr(); + + /* submit the kernel */ + submit_fcoeffs_kernel(f_ptr, key, coeffs_view, phibar_view, hgT_view, tmp_device, + is_leaf_device, ttg::device::current_stream()); + + /* wait and get is_leaf back */ + co_await ttg::device::wait(is_leaf_scratch); + result.is_leaf = is_leaf; + /* todo: is this safe? */ + delete[] tmp; + /** + * END FCOEFFS HERE + */ + if (!result.is_leaf) { std::vector> bcast_keys; for (auto child : children(key)) bcast_keys.push_back(child); diff --git a/examples/madness/mra-device/tensor.h b/examples/madness/mra-device/tensor.h index 3b4887a4c..77a7ceaef 100644 --- a/examples/madness/mra-device/tensor.h +++ b/examples/madness/mra-device/tensor.h @@ -17,7 +17,8 @@ namespace mra { using value_type = std::decay_t; using size_type = std::size_t; using allocator_type = Allocator; - using view_type = TensorView; + using view_type = TensorView; + using const_view_type = TensorView, NDIM>; using buffer_type = ttg::Buffer; static constexpr Dimension ndim() { return NDIM; } @@ -75,11 +76,15 @@ namespace mra { return std::reduce(&m_dims[0], &m_dims[ndim()], 1, std::multiplies{}); } - auto get_buffer() { + size_type dim(Dimension dim) const { + return m_dims[dim]; + } + + auto& buffer() { return m_buffer; } - const auto get_buffer() const { + const auto& buffer() const { return m_buffer; } @@ -91,10 +96,17 @@ namespace mra { return m_buffer.host_ptr(); } - /* returns a view for the current memory space */ + /* returns a view for the current memory space + * TODO: handle const correctness (const Tensor should return a const TensorView)*/ view_type current_view() { return view_type(m_buffer.current_device_ptr(), m_dims); } + + /* returns a view for the current memory space + * TODO: handle const correctness (const Tensor should return a const TensorView)*/ + const_view_type current_view() const { + return const_view_type(m_buffer.current_device_ptr(), m_dims); + } }; } // namespace mra diff --git a/examples/madness/mra-device/tensorview.h b/examples/madness/mra-device/tensorview.h index 41398e820..1c66d767d 100644 --- a/examples/madness/mra-device/tensorview.h +++ b/examples/madness/mra-device/tensorview.h @@ -66,8 +66,9 @@ namespace mra { class TensorView { public: using value_type = std::decay_t; + using const_value_type = std::add_const_t; using size_type = std::size_t; - static constexpr int ndim() { return NDIM; } + static constexpr Dimension ndim() { return NDIM; } using dims_array_t = std::array; static constexpr bool is_tensor() { return true; } @@ -157,7 +158,7 @@ namespace mra { public: template - TensorView(value_type *ptr, Dims... dims) + TensorView(T *ptr, Dims... dims) : m_dims({dims...}) , m_ptr(ptr) { @@ -169,7 +170,7 @@ namespace mra { } } - TensorView(value_type *ptr, const dims_array_t& dims) + TensorView(T *ptr, const dims_array_t& dims) : m_dims(dims) , m_ptr(ptr) { } @@ -197,7 +198,7 @@ namespace mra { return std::reduce(&m_dims[0], &m_dims[ndim()-1], 1, std::multiplies{}); } - size_type dim(size_type d) const { + size_type dim(Dimension d) const { return m_dims[d]; } @@ -273,7 +274,7 @@ namespace mra { private: dims_array_t m_dims; - value_type *m_ptr; + T *m_ptr; // may be const or non-const }; From a1ca087d1b8bcb98bef36d24134a21a7f6bb479c Mon Sep 17 00:00:00 2001 From: Joseph Schuchart Date: Mon, 29 Jul 2024 14:55:57 -0400 Subject: [PATCH 12/13] Fix values tensor size in CUDA kernels Signed-off-by: Joseph Schuchart --- examples/madness/mra-device/kernels.cu | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/examples/madness/mra-device/kernels.cu b/examples/madness/mra-device/kernels.cu index e5e265904..eeb050d68 100644 --- a/examples/madness/mra-device/kernels.cu +++ b/examples/madness/mra-device/kernels.cu @@ -161,17 +161,18 @@ __global__ fcoeffs_kernel1( int tid = threadIdx.x; int blockid = blockIdx.x; const std::size_t K2NDIM = std::pow(K, NDIM); + const std::size_t TWOK2NDIM = std::pow(2*K, NDIM); /* reconstruct tensor views from pointers * make sure we have the values at the same offset (0) as in kernel 1 */ - auto values = mra::TensorView(&tmp[0*K2NDIM], K); - auto r = mra::TensorView(&tmp[1*K2NDIM], K); - auto child_values = mra::TensorView(&tmp[2*K2NDIM], K); - auto workspace = mra::TensorView(&tmp[3*K2NDIM], K); - auto x = mra::TensorView(&tmp[4*K2NDIM], K); - auto x_vec = mra::TensorView(&tmp[5*K2NDIM], NDIM, K2NDIM); + auto values = mra::TensorView(&tmp[0 ], 2*K); + auto r = mra::TensorView(&tmp[TWOK2NDIM+1*K2NDIM], K); + auto child_values = mra::TensorView(&tmp[TWOK2NDIM+2*K2NDIM], K); + auto workspace = mra::TensorView(&tmp[TWOK2NDIM+3*K2NDIM], K); + auto x = mra::TensorView(&tmp[TWOK2NDIM+4*K2NDIM], K); + auto x_vec = mra::TensorView(&tmp[TWOK2NDIM+5*K2NDIM], NDIM, K2NDIM); auto phibar = mra::TensorView(phibar_ptr, K, K); /* compute one child per block */ - if (blockid < (1< child = key.child_at(blockid); fcube(f, child, thresh, child_values, K, x, xvec); transform(child_values,phibar,r, K, workspace); @@ -192,12 +193,12 @@ __global__ fcoeffs_kernel2( { const int tid = threadDim.x * ((threadDim.y*threadIdx.z) + threadIdx.y) + threadIdx.x; const std::size_t K2NDIM = std::pow(K, NDIM); - const std::size_t 2K2NDIM = std::pow(2*K, NDIM); + const std::size_t TWOK2NDIM = std::pow(2*K, NDIM); /* reconstruct tensor views from pointers * make sure we have the values at the same offset (0) as in kernel 1 */ - auto values = mra::TensorView(&tmp[0], K); - auto r = mra::TensorView(&tmp[K2NDIM], 2*K); - auto workspace = mra::TensorView(&tmp[K2NDIM+2K2NDIM], K); + auto values = mra::TensorView(&tmp[0], 2*K); + auto r = mra::TensorView(&tmp[TWOK2NDIM], 2*K); + auto workspace = mra::TensorView(&tmp[2*TWOK2NDIM], K); auto hgT = mra::TensorView(hgT_ptr, 2*K, 2*K); auto coeffs = mra::TensorView(coeffs_ptr, K); From 0f0dc319540100660952e18fbcb0da75de109e22 Mon Sep 17 00:00:00 2001 From: Joseph Schuchart Date: Tue, 6 Aug 2024 14:48:57 -0400 Subject: [PATCH 13/13] Add kernels.cu to cmake target Signed-off-by: Joseph Schuchart --- examples/CMakeLists.txt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index c26dab882..632c45793 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -59,9 +59,13 @@ if (TARGET tiledarray) endif() add_ttg_executable(tensortest madness/mra-device/tests/tensor_test.cc) -#if (TTG_HAVE_CUDA) - add_ttg_executable(mradevice-cuda madness/mra-device/mrattg-device.cc madness/mra-device/gl.cc RUNTIMES "parsec") - #endif (TTG_HAVE_CUDA) +if (TTG_HAVE_CUDA) + add_ttg_executable(mradevice-cuda + madness/mra-device/mrattg-device.cc + madness/mra-device/gl.cc + madness/mra-device/mrattg-device.cc + madness/mra-device/kernels.cu RUNTIMES "parsec") +endif (TTG_HAVE_CUDA) if (TARGET MADworld) add_ttg_executable(madness-1d madness/madness-1d/madness-1d.cc RUNTIMES "mad")