From a6f9260adfebb5974116ce4277e11b5806934a15 Mon Sep 17 00:00:00 2001 From: Charles Zhang Date: Sun, 26 May 2024 23:44:48 -0500 Subject: [PATCH] add waveform multiband --- Cargo.lock | 114 + Cargo.toml | 7 +- src/app.rs | 22 +- src/audio/callback.rs | 259 +- src/frame/setting_frame.rs | 14 +- src/frame/stereogram_frame.rs | 5 +- src/frame/waveform_frame.rs | 109 +- src/setting/waveform.rs | 54 +- src/utils.rs | 2 + src/utils/color.rs | 44 +- src/utils/data_struct.rs | 82 +- src/utils/hann.rs | 77 +- src/utils/iirfilter.rs | 91 +- src/utils/windows.rs | 7522 +++++++++++++++++++++++++++++++++ 14 files changed, 8109 insertions(+), 293 deletions(-) create mode 100644 src/utils/windows.rs diff --git a/Cargo.lock b/Cargo.lock index 271928d..1bb5c11 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -727,12 +727,125 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" +[[package]] +name = "dasp" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7381b67da416b639690ac77c73b86a7b5e64a29e31d1f75fb3b1102301ef355a" +dependencies = [ + "dasp_envelope", + "dasp_frame", + "dasp_interpolate", + "dasp_peak", + "dasp_ring_buffer", + "dasp_rms", + "dasp_sample", + "dasp_signal", + "dasp_slice", + "dasp_window", +] + +[[package]] +name = "dasp_envelope" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ec617ce7016f101a87fe85ed44180839744265fae73bb4aa43e7ece1b7668b6" +dependencies = [ + "dasp_frame", + "dasp_peak", + "dasp_ring_buffer", + "dasp_rms", + "dasp_sample", +] + +[[package]] +name = "dasp_frame" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a3937f5fe2135702897535c8d4a5553f8b116f76c1529088797f2eee7c5cd6" +dependencies = [ + "dasp_sample", +] + +[[package]] +name = "dasp_interpolate" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fc975a6563bb7ca7ec0a6c784ead49983a21c24835b0bc96eea11ee407c7486" +dependencies = [ + "dasp_frame", + "dasp_ring_buffer", + "dasp_sample", +] + +[[package]] +name = "dasp_peak" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cf88559d79c21f3d8523d91250c397f9a15b5fc72fbb3f87fdb0a37b79915bf" +dependencies = [ + "dasp_frame", + "dasp_sample", +] + +[[package]] +name = "dasp_ring_buffer" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07d79e19b89618a543c4adec9c5a347fe378a19041699b3278e616e387511ea1" + +[[package]] +name = "dasp_rms" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6c5dcb30b7e5014486e2822537ea2beae50b19722ffe2ed7549ab03774575aa" +dependencies = [ + "dasp_frame", + "dasp_ring_buffer", + "dasp_sample", +] + [[package]] name = "dasp_sample" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f" +[[package]] +name = "dasp_signal" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa1ab7d01689c6ed4eae3d38fe1cea08cba761573fbd2d592528d55b421077e7" +dependencies = [ + "dasp_envelope", + "dasp_frame", + "dasp_interpolate", + "dasp_peak", + "dasp_ring_buffer", + "dasp_rms", + "dasp_sample", + "dasp_window", +] + +[[package]] +name = "dasp_slice" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e1c7335d58e7baedafa516cb361360ff38d6f4d3f9d9d5ee2a2fc8e27178fa1" +dependencies = [ + "dasp_frame", + "dasp_sample", +] + +[[package]] +name = "dasp_window" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99ded7b88821d2ce4e8b842c9f1c86ac911891ab89443cc1de750cae764c5076" +dependencies = [ + "dasp_sample", +] + [[package]] name = "directories-next" version = "2.0.0" @@ -1686,6 +1799,7 @@ dependencies = [ "anyhow", "cpal", "crossbeam-channel", + "dasp", "eframe", "egui", "env_logger", diff --git a/Cargo.toml b/Cargo.toml index b9c9e6e..85e16ef 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,7 @@ rust-version = "1.78" [dependencies] -egui = {version = "0.27.2", features = ["rayon"]} +egui = { version = "0.27.2", features = ["rayon"] } eframe = { version = "0.27.2", default-features = false, features = [ "default_fonts", "glow", @@ -21,7 +21,7 @@ env_logger = { version = "0.11", default-features = false, features = [ "auto-color", "humantime", ] } -cpal = {version = "0.15.3", exclude = ["js-sys"]} +cpal = { version = "0.15.3", exclude = ["js-sys"] } anyhow = "1.0" rustfft = "6.2.0" realfft = "3.3.0" @@ -30,7 +30,8 @@ log = "0.4" rayon = "1.10" crossbeam-channel = "0.5.12" puffin = { version = "0.19", optional = true } -puffin_http = {version = "0.16", optional = true} +puffin_http = { version = "0.16", optional = true } +dasp = { version = "0.11.0", features = ["ring_buffer"] } [features] default = ["eframe/wgpu"] diff --git a/src/app.rs b/src/app.rs index cdba26f..72b90eb 100644 --- a/src/app.rs +++ b/src/app.rs @@ -58,8 +58,11 @@ impl Default for NanometersApp { let audio_source_buffer = Arc::new(Mutex::new(AudioSourceBuffer::new())); let setting = Setting::default(); let audio_source_setting = Arc::new(Mutex::new(setting.clone())); - let mut system_capture = - SystemCapture::new(get_callback(tx.clone(), audio_source_buffer.clone())); + let mut system_capture = SystemCapture::new(get_callback( + tx.clone(), + audio_source_buffer.clone(), + audio_source_setting.clone(), + )); system_capture.start(); let audio_source = Some(Box::new(system_capture) as Box); @@ -96,24 +99,33 @@ impl NanometersApp { let mut app: NanometersApp = eframe::get_value(storage, eframe::APP_KEY).unwrap_or_default(); cc.egui_ctx.set_visuals(set_theme(&mut app)); + app.audio_source_setting = Arc::new(Mutex::new(app.setting.clone())); match app.setting.audio_device.device { AudioDevice::OutputCapture => { let tx = app.tx.clone().unwrap(); - let callback = get_callback(tx, app.audio_source_buffer.clone()); + let callback = get_callback( + tx, + app.audio_source_buffer.clone(), + app.audio_source_setting.clone(), + ); let mut system_capture = SystemCapture::new(callback); system_capture.start(); app.audio_source = Some(Box::new(system_capture) as Box); } AudioDevice::PluginCapture => { let tx = app.tx.clone().unwrap(); - let callback = get_callback(tx, app.audio_source_buffer.clone()); + let callback = get_callback( + tx, + app.audio_source_buffer.clone(), + app.audio_source_setting.clone(), + ); let mut plugin_client = PluginClient::new(callback); plugin_client.start(); app.audio_source = Some(Box::new(plugin_client) as Box); } _ => {} } - app.audio_source_setting = Arc::new(Mutex::new(app.setting.clone())); + return app; } Default::default() diff --git a/src/audio/callback.rs b/src/audio/callback.rs index f8597dc..4351cf8 100644 --- a/src/audio/callback.rs +++ b/src/audio/callback.rs @@ -1,9 +1,7 @@ -use crate::utils::*; - +use crate::{setting::*, utils::*}; use crossbeam_channel::Sender; use egui::Pos2; use realfft::RealFftPlanner; -use rustfft::num_traits::{real::Real, Pow}; use std::sync::{Arc, Mutex}; const SQRT_2: f32 = 1.4142135; @@ -11,118 +9,193 @@ const SQRT_2: f32 = 1.4142135; pub fn get_callback( tx: Sender, buffer: Arc>, + setting: Arc>, ) -> Box>) + Send + Sync> { Box::new(move |data: Vec>| { #[cfg(feature = "puffin")] puffin::profile_scope!("callback"); let mut buffer = buffer.lock().unwrap(); - let waveform_block_length = 256; - let stereo_block_length = 1; + let setting = setting.lock().unwrap(); + let waveform_on = setting.sequence[1].contains(&ModuleList::Waveform); + let peak_on = setting.sequence[1].contains(&ModuleList::Peak); + let stereo_on = setting.sequence[1].contains(&ModuleList::Stereogram); + let spectrum_on = setting.sequence[1].contains(&ModuleList::Spectrum); + let spectrogram_on = setting.sequence[1].contains(&ModuleList::Spectrogram); + let waveform_block_length = 280; + let stereo_block_length = 1; let mut send_data = SendData::new(); let len = data[0].len(); let mut amp_l = 0.0; let mut amp_r = 0.0; + + // Loop for each sample for i in 0..len { let l = data[0][i]; let r = data[1][i]; let m = (l + r) / 2.0; let s = (l - r) / 2.0; - // Stereo - buffer.stereo.update(l, r); - if buffer.stereo.index >= stereo_block_length { - buffer.stereo.index = 0; - send_data.stereo_data.lissa.push(Pos2::new(l, r)); - send_data - .stereo_data - .linear - .push(Pos2::new(-SQRT_2 * s, -SQRT_2 * m)); - - let length = (l * l + r * r).sqrt(); - let log_x = if length.log10() >= -3.0 { - (length.log10() / 3.0 + 1.0) * l / length - } else { - 0.0 - }; - let log_y = if length.log10() >= -3.0 { - (length.log10() / 3.0 + 1.0) * r / length - } else { - 0.0 - }; - send_data.stereo_data.log.push(Pos2::new( - 0.7071067812 * (log_y - log_x), - -0.7071067812 * (log_x + log_y), - )); + let low_l = multiband_low_filter(l, &mut buffer.multiband.low_buf); + let low_r = multiband_low_filter(r, &mut buffer.multiband.low_buf); + let low_m = multiband_low_filter(m, &mut buffer.multiband.low_buf); + let low_s = multiband_low_filter(s, &mut buffer.multiband.low_buf); + let mid_l = multiband_mid_filter(l, &mut buffer.multiband.mid_buf); + let mid_r = multiband_mid_filter(r, &mut buffer.multiband.mid_buf); + let mid_m = multiband_mid_filter(m, &mut buffer.multiband.mid_buf); + let mid_s = multiband_mid_filter(s, &mut buffer.multiband.mid_buf); + let high_l = multiband_high_filter(l, &mut buffer.multiband.high_buf); + let high_r = multiband_high_filter(r, &mut buffer.multiband.high_buf); + let high_m = multiband_high_filter(m, &mut buffer.multiband.high_buf); + let high_s = multiband_high_filter(s, &mut buffer.multiband.high_buf); + buffer.raw.l.push(l); + buffer.raw.r.push(r); + buffer.raw.m.push(m); + buffer.raw.s.push(s); + buffer.low_raw.l.push(low_l); + buffer.low_raw.r.push(low_r); + buffer.low_raw.m.push(low_m); + buffer.low_raw.s.push(low_s); + buffer.mid_raw.l.push(mid_l); + buffer.mid_raw.r.push(mid_r); + buffer.mid_raw.m.push(mid_m); + buffer.mid_raw.s.push(mid_s); + buffer.high_raw.l.push(high_l); + buffer.high_raw.r.push(high_r); + buffer.high_raw.m.push(high_m); + buffer.high_raw.s.push(high_s); + + buffer.fft_1024_index += 1; + let raw_len = buffer.raw.l.len(); + + if waveform_on { + // Waveform + buffer.waveform.update_l(l); + buffer.waveform.update_r(r); + buffer.waveform.update_m(m); + buffer.waveform.update_s(s); + buffer.waveform.index += 1; + if buffer.waveform.index >= waveform_block_length { + let waveform_buffer = buffer.waveform.clone(); + buffer.waveform.reset(); + + let mut real_planner = RealFftPlanner::::new(); + let r2c = real_planner.plan_fft_forward(1024); + let mut spectrum = r2c.make_output_vec(); + + let mut waveform_temp_l = vec![0.0; 1024]; + waveform_temp_l[..waveform_block_length] + .copy_from_slice(&buffer.raw.l[raw_len - waveform_block_length..raw_len]); + r2c.process(&mut waveform_temp_l, &mut spectrum).unwrap(); + send_data.waveform_data.l.push(WaveformSendFrame { + value: waveform_buffer.l, + color: multiband_color(spectrum.iter().map(|x| x.norm()).collect()), + }); + + let mut waveform_temp_r = vec![0.0; 1024]; + waveform_temp_r[..waveform_block_length].copy_from_slice( + &buffer.raw.r + [buffer.raw.r.len() - waveform_block_length..buffer.raw.r.len()], + ); + r2c.process(&mut waveform_temp_r, &mut spectrum).unwrap(); + send_data.waveform_data.r.push(WaveformSendFrame { + value: waveform_buffer.r, + color: multiband_color(spectrum.iter().map(|x| x.norm()).collect()), + }); + + let mut waveform_temp_m = vec![0.0; 1024]; + waveform_temp_m[..waveform_block_length].copy_from_slice( + &buffer.raw.m + [buffer.raw.m.len() - waveform_block_length..buffer.raw.m.len()], + ); + r2c.process(&mut waveform_temp_m, &mut spectrum).unwrap(); + send_data.waveform_data.m.push(WaveformSendFrame { + value: waveform_buffer.m, + color: multiband_color(spectrum.iter().map(|x| x.norm()).collect()), + }); + + let mut waveform_temp_s = vec![0.0; 1024]; + waveform_temp_s[..waveform_block_length].copy_from_slice( + &buffer.raw.s + [buffer.raw.s.len() - waveform_block_length..buffer.raw.s.len()], + ); + r2c.process(&mut waveform_temp_s, &mut spectrum).unwrap(); + send_data.waveform_data.s.push(WaveformSendFrame { + value: waveform_buffer.s, + color: multiband_color(spectrum.iter().map(|x| x.norm()).collect()), + }); + } } - // Waveform - buffer.waveform.update_l(l); - buffer.waveform.update_r(r); - buffer.waveform.update_m(m); - buffer.waveform.update_s(s); - buffer.waveform.index += 1; - if buffer.waveform.index >= waveform_block_length { - let mut waveform_buffer = buffer.waveform.clone(); - buffer.waveform.reset(); - send_data.waveform_data.l.push(waveform_buffer.l); - send_data.waveform_data.r.push(waveform_buffer.r); - send_data.waveform_data.m.push(waveform_buffer.m); - send_data.waveform_data.s.push(waveform_buffer.s); - - let mut real_planner = RealFftPlanner::::new(); - let r2c = real_planner.plan_fft_forward(waveform_block_length); - let mut spectrum = r2c.make_output_vec(); - r2c.process(&mut waveform_buffer.raw.l, &mut spectrum) - .unwrap(); - send_data - .waveform_data - .l_color - .push(multiband_color(spectrum.iter().map(|x| x.norm()).collect())); - r2c.process(&mut waveform_buffer.raw.r, &mut spectrum) - .unwrap(); - send_data - .waveform_data - .r_color - .push(multiband_color(spectrum.iter().map(|x| x.norm()).collect())); - r2c.process(&mut waveform_buffer.raw.m, &mut spectrum) - .unwrap(); - send_data - .waveform_data - .m_color - .push(multiband_color(spectrum.iter().map(|x| x.norm()).collect())); - r2c.process(&mut waveform_buffer.raw.s, &mut spectrum) - .unwrap(); - send_data - .waveform_data - .s_color - .push(multiband_color(spectrum.iter().map(|x| x.norm()).collect())); + if stereo_on { + // Stereo + buffer.stereo.update(l, r); + if buffer.stereo.index >= stereo_block_length { + buffer.stereo.index = 0; + send_data.stereo_data.lissa.push(Pos2::new(l, r)); + send_data + .stereo_data + .linear + .push(Pos2::new(-SQRT_2 * s, -SQRT_2 * m)); + + let length = (l * l + r * r).sqrt(); + let log_x = if length.log10() >= -3.0 { + (length.log10() / 3.0 + 1.0) * l / length + } else { + 0.0 + }; + let log_y = if length.log10() >= -3.0 { + (length.log10() / 3.0 + 1.0) * r / length + } else { + 0.0 + }; + send_data.stereo_data.log.push(Pos2::new( + 0.7071067812 * (log_y - log_x), + -0.7071067812 * (log_x + log_y), + )); + } } - // Peak - // DB - amp_l += l.abs(); - amp_r += r.abs(); - //IIR - let iir_l = combined_filter(l, &mut buffer.peak.iir_l); - let iir_r = combined_filter(r, &mut buffer.peak.iir_r); - buffer.peak.sum += iir_l * iir_l + iir_r * iir_r; - buffer.peak.index += 1; - if buffer.peak.index >= 4800 { - let peak_buffer = buffer.peak.clone(); - buffer.peak.reset_sum(); - send_data.iir_data.push(peak_buffer.sum / 4800.0); + if peak_on { + // Peak + // DB + amp_l += l.abs(); + amp_r += r.abs(); + //IIR + let iir_l = lufs_combined_filter(l, &mut buffer.peak.iir_l); + let iir_r = lufs_combined_filter(r, &mut buffer.peak.iir_r); + buffer.peak.sum += iir_l * iir_l + iir_r * iir_r; + buffer.peak.index += 1; + if buffer.peak.index >= 4800 { + let peak_buffer = buffer.peak.clone(); + buffer.peak.reset_sum(); + send_data.iir_data.push(peak_buffer.sum / 4800.0); + } + } + + if buffer.raw.l.len() >= 4096 { + buffer.raw.keep_last(2048); + buffer.low_raw.keep_last(2048); + buffer.mid_raw.keep_last(2048); + buffer.high_raw.keep_last(2048); } } - // Stereo - send_data.stereo_data.max = buffer.stereo.max; - buffer.stereo.max = f32::NEG_INFINITY; - - // DB - amp_l /= len as f32; - amp_r /= len as f32; - send_data.db_data.l = gain_to_db(amp_l); - send_data.db_data.r = gain_to_db(amp_r); + + // Send data + + if stereo_on { + // Stereo + send_data.stereo_data.max = buffer.stereo.max; + buffer.stereo.max = f32::NEG_INFINITY; + } + + if peak_on { + // DB + amp_l /= len as f32; + amp_r /= len as f32; + send_data.db_data.l = gain_to_db(amp_l); + send_data.db_data.r = gain_to_db(amp_r); + } tx.send(send_data).unwrap(); }) diff --git a/src/frame/setting_frame.rs b/src/frame/setting_frame.rs index bed3e78..6a51105 100644 --- a/src/frame/setting_frame.rs +++ b/src/frame/setting_frame.rs @@ -206,7 +206,11 @@ impl NanometersApp { { self.audio_source.as_mut().unwrap().stop(); let tx = self.tx.clone().unwrap(); - let callback = get_callback(tx, self.audio_source_buffer.clone()); + let callback = get_callback( + tx, + self.audio_source_buffer.clone(), + self.audio_source_setting.clone(), + ); let mut system_capture = SystemCapture::new(callback); system_capture.start(); self.audio_source = Some(Box::new(system_capture) as Box); @@ -221,7 +225,11 @@ impl NanometersApp { { self.audio_source.as_mut().unwrap().stop(); let tx = self.tx.clone().unwrap(); - let callback = get_callback(tx, self.audio_source_buffer.clone()); + let callback = get_callback( + tx, + self.audio_source_buffer.clone(), + self.audio_source_setting.clone(), + ); let mut plugin_client = PluginClient::new(callback); plugin_client.start(); self.audio_source = Some(Box::new(plugin_client) as Box); @@ -320,6 +328,8 @@ impl NanometersApp { let column = &mut self.setting.sequence[to.col]; to.row = to.row.min(column.len()); column.insert(to.row, item); + self.audio_source_setting.lock().unwrap().sequence = + self.setting.sequence.clone(); } }); }); diff --git a/src/frame/stereogram_frame.rs b/src/frame/stereogram_frame.rs index 6b77d18..db6bb5c 100644 --- a/src/frame/stereogram_frame.rs +++ b/src/frame/stereogram_frame.rs @@ -17,6 +17,7 @@ impl NanometersApp { ui: &mut Ui, ) { ui.painter().rect_filled(rect, 0.0, self.setting.theme.bg); + self.setting.stereogram.point_size = rect.max.y * 0.01; match self.setting.stereogram.mode { StereogramMode::Logarithmic => { match self.setting.stereogram.polarity { @@ -174,7 +175,7 @@ impl NanometersApp { .map(|p| { Shape::circle_filled( transform.mul_pos(p.to_owned()), - self.setting.stereogram.point_size, + self.setting.stereogram.point_size * 0.5, self.setting.theme.main, ) }) @@ -346,7 +347,7 @@ impl NanometersApp { .map(|p| { Shape::circle_filled( transform.mul_pos(p.clone()), - self.setting.stereogram.point_size, + self.setting.stereogram.point_size * 0.5, self.setting.theme.main, ) }) diff --git a/src/frame/waveform_frame.rs b/src/frame/waveform_frame.rs index d6b14ee..c9a34ad 100644 --- a/src/frame/waveform_frame.rs +++ b/src/frame/waveform_frame.rs @@ -13,45 +13,62 @@ impl NanometersApp { match self.setting.waveform.channel_1 { WaveformChannel::None => {} WaveformChannel::Left => { - self.waveform_upper_channel_frame(&data.l, &data.l_color, upper_rect, ui); + self.waveform_upper_channel_frame(&data.l, upper_rect, ui); } WaveformChannel::Right => { - self.waveform_upper_channel_frame(&data.r, &data.r_color, upper_rect, ui); + self.waveform_upper_channel_frame(&data.r, upper_rect, ui); } WaveformChannel::Mid => { - self.waveform_upper_channel_frame(&data.m, &data.m_color, upper_rect, ui); + self.waveform_upper_channel_frame(&data.m, upper_rect, ui); } WaveformChannel::Side => { - self.waveform_upper_channel_frame(&data.s, &data.s_color, upper_rect, ui); + self.waveform_upper_channel_frame(&data.s, upper_rect, ui); } } match self.setting.waveform.channel_2 { WaveformChannel::None => {} WaveformChannel::Left => { - self.waveform_lower_channel_frame(&data.l, &data.l_color, lower_rect, ui); + self.waveform_lower_channel_frame(&data.l, lower_rect, ui); } WaveformChannel::Right => { - self.waveform_lower_channel_frame(&data.r, &data.r_color, lower_rect, ui); + self.waveform_lower_channel_frame(&data.r, lower_rect, ui); } WaveformChannel::Mid => { - self.waveform_lower_channel_frame(&data.m, &data.m_color, lower_rect, ui); + self.waveform_lower_channel_frame(&data.m, lower_rect, ui); } WaveformChannel::Side => { - self.waveform_lower_channel_frame(&data.s, &data.s_color, lower_rect, ui); + self.waveform_lower_channel_frame(&data.s, lower_rect, ui); } } + + match self.setting.waveform.peak_history { + WaveformHistory::Off => {} + WaveformHistory::Fast => { + ui.painter().rect_filled( + rect, + 0.0, + Color32::from_rgba_unmultiplied( + self.setting.theme.bg.r(), + self.setting.theme.bg.g(), + self.setting.theme.bg.b(), + 100, + ), + ); + self.waveform_history_frame(&data.m, rect, ui) + } + WaveformHistory::Slow => {} + } } fn waveform_upper_channel_frame( &mut self, - data: &[MAXMIN], - color: &[Color32], + data: &[WaveformSendFrame], rect: Rect, ui: &mut Ui, ) { if !data.is_empty() { - data.iter().zip(color).for_each(|(v, c)| { + data.iter().for_each(|(v)| { if self.waveform.plot_point.uu.len() >= self.waveform.history_length { self.waveform.plot_point.uu.pop_front(); self.waveform.plot_point.ud.pop_front(); @@ -60,12 +77,15 @@ impl NanometersApp { self.waveform .plot_point .uu - .push_back(rect.center().y - rect.height() * v.max / 2.0); + .push_back(rect.center().y - rect.height() * v.value.max / 2.0); self.waveform .plot_point .ud - .push_back(rect.center().y - rect.height() * v.min / 2.0); - self.waveform.plot_point.ucolor.push_back(*c); + .push_back(rect.center().y - rect.height() * v.value.min / 2.0); + self.waveform + .plot_point + .ucolor + .push_back(full_brightness_color(&v.color)); }); } let len = self.waveform.plot_point.uu.len(); @@ -98,13 +118,12 @@ impl NanometersApp { fn waveform_lower_channel_frame( &mut self, - data: &[MAXMIN], - color: &[Color32], + data: &[WaveformSendFrame], rect: Rect, ui: &mut Ui, ) { if !data.is_empty() { - data.iter().zip(color).for_each(|(v, c)| { + data.iter().for_each(|(v)| { if self.waveform.plot_point.du.len() >= self.waveform.history_length { self.waveform.plot_point.du.pop_front(); self.waveform.plot_point.dd.pop_front(); @@ -113,12 +132,15 @@ impl NanometersApp { self.waveform .plot_point .du - .push_back(rect.center().y - rect.height() * v.max / 2.0); + .push_back(rect.center().y - rect.height() * v.value.max / 2.0); self.waveform .plot_point .dd - .push_back(rect.center().y - rect.height() * v.min / 2.0); - self.waveform.plot_point.dcolor.push_back(*c); + .push_back(rect.center().y - rect.height() * v.value.min / 2.0); + self.waveform + .plot_point + .dcolor + .push_back(full_brightness_color(&v.color)); }); } let len = self.waveform.plot_point.du.len(); @@ -148,4 +170,51 @@ impl NanometersApp { .collect(); ui.painter().extend(shapes); } + + fn waveform_history_frame(&mut self, data: &[WaveformSendFrame], rect: Rect, ui: &mut Ui) { + if !data.is_empty() { + data.iter().for_each(|(v)| { + if self.waveform.plot_point.r.len() >= self.waveform.history_length { + self.waveform.plot_point.r.pop_front(); + self.waveform.plot_point.g.pop_front(); + self.waveform.plot_point.b.pop_front(); + } + self.waveform + .plot_point + .r + .push_back(rect.height() * (1.0 - v.color[0])); + self.waveform + .plot_point + .g + .push_back(rect.height() * (1.0 - v.color[1])); + self.waveform + .plot_point + .b + .push_back(rect.height() * (1.0 - v.color[2])); + }); + } + let len = self.waveform.plot_point.r.len(); + let mut r_points = Vec::new(); + let mut g_points = Vec::new(); + let mut b_points = Vec::new(); + for i in 0..rect.width() as usize { + r_points.push(Pos2::new( + rect.max.x - i as f32, + *self.waveform.plot_point.r.get(len - i).unwrap_or(&0.0), + )); + g_points.push(Pos2::new( + rect.max.x - i as f32, + *self.waveform.plot_point.g.get(len - i).unwrap_or(&0.0), + )); + b_points.push(Pos2::new( + rect.max.x - i as f32, + *self.waveform.plot_point.b.get(len - i).unwrap_or(&0.0), + )); + } + + let r_line = Shape::line(r_points, Stroke::new(1.0, Color32::RED)); + let g_line = Shape::line(g_points, Stroke::new(1.0, Color32::GREEN)); + let b_line = Shape::line(b_points, Stroke::new(1.0, Color32::BLUE)); + ui.painter().extend(vec![r_line, g_line, b_line]); + } } diff --git a/src/setting/waveform.rs b/src/setting/waveform.rs index d47c953..cefbfe4 100644 --- a/src/setting/waveform.rs +++ b/src/setting/waveform.rs @@ -44,6 +44,9 @@ pub struct WaveformPlotPoint { pub(crate) du: VecDeque, pub(crate) dd: VecDeque, pub(crate) dcolor: VecDeque, + pub(crate) r: VecDeque, + pub(crate) g: VecDeque, + pub(crate) b: VecDeque, } impl WaveformPlotPoint { @@ -55,6 +58,9 @@ impl WaveformPlotPoint { du: VecDeque::with_capacity(size), dd: VecDeque::with_capacity(size), dcolor: VecDeque::with_capacity(size), + r: VecDeque::with_capacity(size), + g: VecDeque::with_capacity(size), + b: VecDeque::with_capacity(size), } } } @@ -105,28 +111,28 @@ impl WaveformCalcBuffer { } } pub fn update_l(&mut self, val: f32) { - self.raw.l.push(val); self.l.max = self.l.max.max(val); self.l.min = self.l.min.min(val); + self.raw.l.push(val * HANN_280[self.index]); } pub fn update_r(&mut self, val: f32) { - self.raw.r.push(val); self.r.max = self.r.max.max(val); self.r.min = self.r.min.min(val); + self.raw.r.push(val * HANN_280[self.index]); } pub fn update_m(&mut self, val: f32) { - self.raw.m.push(val); self.m.max = self.m.max.max(val); self.m.min = self.m.min.min(val); + self.raw.m.push(val * HANN_280[self.index]); } pub fn update_s(&mut self, val: f32) { - self.raw.s.push(val); self.s.max = self.s.max.max(val); self.s.min = self.s.min.min(val); + self.raw.s.push(val * HANN_280[self.index]); } pub fn reset(&mut self) { self.index = 0; - self.raw.clear(); + self.raw = RawData::new(); self.l = MAXMIN::new(); self.r = MAXMIN::new(); self.m = MAXMIN::new(); @@ -134,20 +140,18 @@ impl WaveformCalcBuffer { } } +#[derive(Debug, Clone, Default)] +pub struct WaveformSendFrame { + pub value: MAXMIN, + pub color: [f32; 3], +} + #[derive(Debug, Clone, Default)] pub struct WaveformSendData { - pub l: Vec, - pub r: Vec, - pub m: Vec, - pub s: Vec, - pub l_freq: Vec, - pub r_freq: Vec, - pub m_freq: Vec, - pub s_freq: Vec, - pub l_color: Vec, - pub r_color: Vec, - pub m_color: Vec, - pub s_color: Vec, + pub l: Vec, + pub r: Vec, + pub m: Vec, + pub s: Vec, } impl WaveformSendData { @@ -157,14 +161,6 @@ impl WaveformSendData { r: vec![], m: vec![], s: vec![], - l_freq: vec![], - r_freq: vec![], - m_freq: vec![], - s_freq: vec![], - l_color: vec![], - r_color: vec![], - m_color: vec![], - s_color: vec![], } } pub fn concat(&mut self, data: &WaveformSendData) { @@ -172,13 +168,5 @@ impl WaveformSendData { self.r.extend_from_slice(&data.r); self.m.extend_from_slice(&data.m); self.s.extend_from_slice(&data.s); - self.l_freq.extend_from_slice(&data.l_freq); - self.r_freq.extend_from_slice(&data.r_freq); - self.m_freq.extend_from_slice(&data.m_freq); - self.s_freq.extend_from_slice(&data.s_freq); - self.l_color.extend_from_slice(&data.l_color); - self.r_color.extend_from_slice(&data.r_color); - self.m_color.extend_from_slice(&data.m_color); - self.s_color.extend_from_slice(&data.s_color); } } diff --git a/src/utils.rs b/src/utils.rs index 64d1cca..b68d92d 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -8,6 +8,7 @@ pub(crate) mod hann; pub(crate) mod iirfilter; pub(crate) mod rect_alloc; pub(crate) mod ringbuffer; +pub(crate) mod windows; pub use calc_check::*; pub use color::*; @@ -18,3 +19,4 @@ pub use hann::*; pub use iirfilter::*; pub use rect_alloc::*; pub use ringbuffer::*; +pub use windows::*; diff --git a/src/utils/color.rs b/src/utils/color.rs index efbd9da..edf4b64 100644 --- a/src/utils/color.rs +++ b/src/utils/color.rs @@ -1,19 +1,37 @@ -pub fn multiband_color(data: Vec) -> egui::Color32 { - let low_size = 3; - let mid_size = 5; - let high_size = data.len() - low_size - mid_size; - let low = data.iter().take(low_size).sum::() * 256.0 / low_size as f32; - let mid = - data.iter().skip(low_size).take(mid_size).sum::() * 256.0 * 0.9 / mid_size as f32; +use crate::utils::*; + +pub fn multiband_color(data: Vec) -> [f32; 3] { + let low = data + .iter() + .take(128) + .zip(MB_LOW.iter()) + .map(|(a, b)| a * b) + .sum::() + / 256.0; + let mid = data + .iter() + .take(436) + .zip(MB_MID.iter()) + .map(|(a, b)| a * b) + .sum::() + / (436.0 * 2.0); let high = data .iter() - .skip(low_size + mid_size) - .take(high_size) + .take(512) + .zip(MB_HIGH.iter()) + .map(|(a, b)| a * b) .sum::() - * 256.0 - * 0.7 - / high_size as f32; - egui::Color32::from_rgb(low as u8, mid as u8, high as u8) + / 1024.0; + [if low > 1.0 { 1.0 } else { low }, mid, high] +} + +pub fn full_brightness_color(rgb: &[f32; 3]) -> egui::Color32 { + let max = rgb.iter().max_by(|a, b| a.partial_cmp(b).unwrap()).unwrap(); + egui::Color32::from_rgb( + (rgb[0] * (1.0 / max) * 255.0) as u8, + (rgb[1] * (1.0 / max) * 255.0) as u8, + (rgb[2] * (1.0 / max) * 255.0) as u8, + ) } pub fn color_lut_129() -> Vec { diff --git a/src/utils/data_struct.rs b/src/utils/data_struct.rs index 6621bb7..2440b28 100644 --- a/src/utils/data_struct.rs +++ b/src/utils/data_struct.rs @@ -1,6 +1,6 @@ -use egui::Pos2; - use crate::setting::*; +use dasp::*; +use egui::Pos2; use std::fmt::Display; #[derive(Debug, Clone, Default)] @@ -20,26 +20,36 @@ impl RawData { } } - pub fn concat(&mut self, data: RawData) { - self.l.extend(data.l); - self.r.extend(data.r); - self.m.extend(data.m); - self.s.extend(data.s); - } - - pub fn concat_front(&mut self, data: RawData) { - self.l.splice(0..0, data.l); - self.r.splice(0..0, data.r); - self.m.splice(0..0, data.m); - self.s.splice(0..0, data.s); - } - - pub fn split_index(&self, index: usize) -> RawData { - let l = self.l[index..].to_vec(); - let r = self.r[index..].to_vec(); - let m = self.m[index..].to_vec(); - let s = self.s[index..].to_vec(); - RawData { l, r, m, s } + // pub fn concat(&mut self, data: RawData) { + // self.l.extend(data.l); + // self.r.extend(data.r); + // self.m.extend(data.m); + // self.s.extend(data.s); + // } + + // pub fn concat_front(&mut self, data: RawData) { + // self.l.splice(0..0, data.l); + // self.r.splice(0..0, data.r); + // self.m.splice(0..0, data.m); + // self.s.splice(0..0, data.s); + // } + + // pub fn split_index(&self, index: usize) -> RawData { + // let l = self.l[index..].to_vec(); + // let r = self.r[index..].to_vec(); + // let m = self.m[index..].to_vec(); + // let s = self.s[index..].to_vec(); + // RawData { l, r, m, s } + // } + + pub fn keep_last(&mut self, size: usize) { + let len = self.l.len(); + if len > size { + self.l.drain(0..len - size); + self.r.drain(0..len - size); + self.m.drain(0..len - size); + self.s.drain(0..len - size); + } } pub fn clear(&mut self) { @@ -72,18 +82,18 @@ impl MAXMIN { } #[derive(Debug, Clone, Default)] -pub struct Multiband { - pub low: f32, - pub mid: f32, - pub high: f32, +pub struct MultibandCalcBuffer { + pub low_buf: IIRBuffer, + pub mid_buf: IIRBuffer, + pub high_buf: IIRBuffer, } -impl Multiband { +impl MultibandCalcBuffer { pub fn new() -> Self { Self { - low: 0.0, - mid: 0.0, - high: 0.0, + low_buf: IIRBuffer::new(), + mid_buf: IIRBuffer::new(), + high_buf: IIRBuffer::new(), } } } @@ -129,6 +139,12 @@ impl StereoCalcBuffer { #[derive(Debug, Clone, Default)] pub struct AudioSourceBuffer { + pub fft_1024_index: usize, + pub raw: RawData, + pub low_raw: RawData, + pub mid_raw: RawData, + pub high_raw: RawData, + pub multiband: MultibandCalcBuffer, pub peak: PeakCalcBuffer, pub waveform: WaveformCalcBuffer, pub stereo: StereoCalcBuffer, @@ -137,6 +153,12 @@ pub struct AudioSourceBuffer { impl AudioSourceBuffer { pub fn new() -> Self { Self { + fft_1024_index: 0, + raw: RawData::new(), + low_raw: RawData::new(), + mid_raw: RawData::new(), + high_raw: RawData::new(), + multiband: MultibandCalcBuffer::new(), peak: PeakCalcBuffer::new(), waveform: WaveformCalcBuffer::new(), stereo: StereoCalcBuffer::new(), diff --git a/src/utils/hann.rs b/src/utils/hann.rs index 276d3a4..a9260fa 100644 --- a/src/utils/hann.rs +++ b/src/utils/hann.rs @@ -3,7 +3,7 @@ use std::f64::consts::PI; const FS: f64 = 48000.0; -fn hann(len: usize) -> Vec { +pub fn hann(len: usize) -> Vec { (0..len) .map(|i| { let x = (i as f64) / (len as f64 - 1.0); @@ -12,7 +12,7 @@ fn hann(len: usize) -> Vec { .collect() } -fn timederivhann(len: isize) -> Vec { +pub fn timederivhann(len: isize) -> Vec { let m = len / 2; let pos: Vec = (0..m).map(|x| (x as f64) + 0.5).collect(); let neg: Vec = ((-m)..0).map(|x| (x as f64) + 0.5).collect(); @@ -37,7 +37,7 @@ fn timederivhann(len: isize) -> Vec { result.iter().map(|x| -x.im * FS / len as f64).collect() } -fn timeramphann(len: isize) -> Vec { +pub fn timeramphann(len: isize) -> Vec { let m = len / 2; let tramp = (-m..m).map(|x| (x as f64) + 0.5).collect::>(); (0..len) @@ -47,74 +47,3 @@ fn timeramphann(len: isize) -> Vec { }) .collect() } - -// pub const HANN_1024: [f32; 1024] = hann::<1024>(); -// pub const HANN_2048: [f32; 2048] = hann::<2048>(); -// pub const HANN_DT_1024: [f32; 1024] = timederivhann(1024); -// pub const HANN_T_1024: [f32; 1024] = timeramphann(1024); - -// pub const HANN_2048: [f32; 2048] = hann(2048); -// pub const HANN_DT_2048: [f32; 2048] = timederivhann(2048); -// pub const HANN_T_2048: [f32; 2048] = timeramphann(2048); - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn test_hann() { - let hann = hann(10); - let hann_10 = [ - 0.0, - 0.116977778440511, - 0.4131759111665348, - 0.7499999999999999, - 0.9698463103929542, - 0.9698463103929542, - 0.7500000000000002, - 0.413175911166535, - 0.1169777784405111, - 0.0, - ]; - assert_eq!(hann.len(), 10); - assert_eq!(hann, hann_10); - } - - #[test] - fn test_timederivhann() { - let timederivhann = timederivhann(10); - let timederivhann_10 = vec![ - 301.49629623273296, - 1627.4648199448773, - 2669.5592277383735, - 2280.0969596899877, - 936.5062556637607, - -936.5062556637583, - -2280.096959689988, - -2669.5592277383735, - -1627.464819944879, - -301.49629623273324, - ]; - assert_eq!(timederivhann.len(), 10); - assert_eq!(timederivhann, timederivhann_10); - } - - #[test] - fn test_timeramphann() { - let timeramphann = timeramphann(10); - let timeramphann_10 = vec![ - 0.0, - -8.529629677953926e-6, - -2.1519578706590354e-5, - -2.3437499999999994e-5, - -1.0102565733259939e-5, - 1.0102565733259939e-5, - 2.343750000000001e-5, - 2.1519578706590368e-5, - 8.529629677953936e-6, - 0.0, - ]; - assert_eq!(timeramphann.len(), 10); - assert_eq!(timeramphann, timeramphann_10); - } -} diff --git a/src/utils/iirfilter.rs b/src/utils/iirfilter.rs index ab4b301..68d44c7 100644 --- a/src/utils/iirfilter.rs +++ b/src/utils/iirfilter.rs @@ -1,23 +1,40 @@ use crate::setting::*; -pub const SHELVING_A1: f32 = -1.69065929318241; -pub const SHELVING_A2: f32 = 0.73248077421585; -pub const SHELVING_B0: f32 = 1.53512485958697; -pub const SHELVING_B1: f32 = -2.69169618940638; -pub const SHELVING_B2: f32 = 1.19839281085285; -pub const HIGHPASS_A1: f32 = -1.99004745483398; -pub const HIGHPASS_A2: f32 = 0.99007225036621; -pub const HIGHPASS_B0: f32 = 1.0; -pub const HIGHPASS_B1: f32 = -2.0; -pub const HIGHPASS_B2: f32 = 1.0; - -pub fn combined_filter(x_0: f32, buffer: &mut IIRBuffer) -> f32 { - let y_0 = SHELVING_B0 * x_0 + SHELVING_B1 * buffer.x_1 + SHELVING_B2 * buffer.x_2 - - SHELVING_A1 * buffer.y_1 - - SHELVING_A2 * buffer.y_2; - let z_0 = HIGHPASS_B0 * y_0 + HIGHPASS_B1 * buffer.y_1 + HIGHPASS_B2 * buffer.y_2 - - HIGHPASS_A1 * buffer.z_1 - - HIGHPASS_A2 * buffer.z_2; +// LUFS filter, ITU-R BS.1770-5, high-pass 100Hz, shelving 1000Hz +pub const HP100_A: [f32; 2] = [-1.9900474548339844, 0.9900722503662109]; +pub const HP100_B: [f32; 3] = [1.0, -2.0, 1.0]; + +pub const SHELVING_A: [f32; 2] = [-1.69065929318241, 0.73248077421585]; +pub const SHELVING_B: [f32; 3] = [1.53512485958697, -2.69169618940638, 1.19839281085285]; + +// Multiband filter, 200Hz, 2000Hz +pub const LP200_A: [f32; 2] = [-1.9629800893893397, 0.9636529842237055]; +pub const LP200_B: [f32; 3] = [ + 0.00016822370859146955, + 0.0003364474171829391, + 0.00016822370859146955, +]; + +pub const HP200_A: [f32; 2] = [-1.9629800893893397, 0.9636529842237055]; +pub const HP200_B: [f32; 3] = [0.9816582684032612, -1.9633165368065224, 0.9816582684032612]; + +pub const LP2000_A: [f32; 2] = [-1.632993161855452, 0.6905989232414969]; +pub const LP2000_B: [f32; 3] = [ + 0.014401440346511215, + 0.02880288069302243, + 0.014401440346511215, +]; + +pub const HP2000_A: [f32; 2] = [-1.632993161855452, 0.6905989232414969]; +pub const HP2000_B: [f32; 3] = [0.8308980212742374, -1.6617960425484748, 0.8308980212742374]; + +pub fn lufs_combined_filter(x_0: f32, buffer: &mut IIRBuffer) -> f32 { + let y_0 = SHELVING_B[0] * x_0 + SHELVING_B[1] * buffer.x_1 + SHELVING_B[2] * buffer.x_2 + - SHELVING_A[0] * buffer.y_1 + - SHELVING_A[1] * buffer.y_2; + let z_0 = y_0 - buffer.y_1 - buffer.y_1 + buffer.y_2 + - HP100_A[0] * buffer.z_1 + - HP100_A[1] * buffer.z_2; buffer.x_2 = buffer.x_1; buffer.x_1 = x_0; buffer.y_2 = buffer.y_1; @@ -26,3 +43,41 @@ pub fn combined_filter(x_0: f32, buffer: &mut IIRBuffer) -> f32 { buffer.z_1 = z_0; z_0 } + +pub fn multiband_low_filter(x_0: f32, buffer: &mut IIRBuffer) -> f32 { + let y_0 = LP200_B[0] * x_0 + LP200_B[1] * buffer.x_1 + LP200_B[2] * buffer.x_2 + - LP200_A[0] * buffer.y_1 + - LP200_A[1] * buffer.y_2; + buffer.x_2 = buffer.x_1; + buffer.x_1 = x_0; + buffer.y_2 = buffer.y_1; + buffer.y_1 = y_0; + y_0 +} + +pub fn multiband_mid_filter(x_0: f32, buffer: &mut IIRBuffer) -> f32 { + let y_0 = LP2000_B[0] * x_0 + LP2000_B[1] * buffer.x_1 + LP2000_B[2] * buffer.x_2 + - LP2000_A[0] * buffer.y_1 + - LP2000_A[1] * buffer.y_2; + let z_0 = HP200_B[0] * y_0 + HP200_B[1] * buffer.y_1 + HP200_B[2] * buffer.y_2 + - HP200_A[0] * buffer.z_1 + - HP200_A[1] * buffer.z_2; + buffer.x_2 = buffer.x_1; + buffer.x_1 = x_0; + buffer.y_2 = buffer.y_1; + buffer.y_1 = y_0; + buffer.z_2 = buffer.z_1; + buffer.z_1 = z_0; + y_0 +} + +pub fn multiband_high_filter(x_0: f32, buffer: &mut IIRBuffer) -> f32 { + let y_0 = HP2000_B[0] * x_0 + HP2000_B[1] * buffer.x_1 + HP2000_B[2] * buffer.x_2 + - HP2000_A[0] * buffer.y_1 + - HP2000_A[1] * buffer.y_2; + buffer.x_2 = buffer.x_1; + buffer.x_1 = x_0; + buffer.y_2 = buffer.y_1; + buffer.y_1 = y_0; + y_0 +} diff --git a/src/utils/windows.rs b/src/utils/windows.rs new file mode 100644 index 0000000..33aad33 --- /dev/null +++ b/src/utils/windows.rs @@ -0,0 +1,7522 @@ +// Multiband windows +// Low from 0 to 127, mid from 0 to 435, high from 0 to 512 +pub const MB_LOW: [f32; 128] = [ + 1.000000000000000000e+00, + 9.984949827194213867e-01, + 9.767044782638549805e-01, + 8.964417576789855957e-01, + 7.511253356933593750e-01, + 5.886337161064147949e-01, + 4.512231945991516113e-01, + 3.482021093368530273e-01, + 2.735189795494079590e-01, + 2.191942632198333740e-01, + 1.790119409561157227e-01, + 1.486817598342895508e-01, + 1.253240406513214111e-01, + 1.069988757371902466e-01, + 9.237948060035705566e-02, + 8.054115623235702515e-02, + 7.082670181989669800e-02, + 6.276017427444458008e-02, + 5.599079281091690063e-02, + 5.025579407811164856e-02, + 4.535538703203201294e-02, + 4.113559052348136902e-02, + 3.747624903917312622e-02, + 3.428251668810844421e-02, + 3.147875890135765076e-02, + 2.900405414402484894e-02, + 2.680891752243041992e-02, + 2.485281042754650116e-02, + 2.310227975249290466e-02, + 2.152951620519161224e-02, + 2.011125534772872925e-02, + 1.882791519165039062e-02, + 1.766291819512844086e-02, + 1.660215482115745544e-02, + 1.563355699181556702e-02, + 1.474675256758928299e-02, + 1.393278688192367554e-02, + 1.318389829248189926e-02, + 1.249333191663026810e-02, + 1.185518782585859299e-02, + 1.126429066061973572e-02, + 1.071609091013669968e-02, + 1.020657271146774292e-02, + 9.732181206345558167e-03, + 9.289760142564773560e-03, + 8.876500651240348816e-03, + 8.489895612001419067e-03, + 8.127700537443161011e-03, + 7.787905167788267136e-03, + 7.468698546290397644e-03, + 7.168450858443975449e-03, + 6.885690148919820786e-03, + 6.619084160774946213e-03, + 6.367426365613937378e-03, + 6.129619199782609940e-03, + 5.904664751142263412e-03, + 5.691654048860073090e-03, + 5.489755421876907349e-03, + 5.298209842294454575e-03, + 5.116321612149477005e-03, + 4.943451844155788422e-03, + 4.779014736413955688e-03, + 4.622470587491989136e-03, + 4.473321605473756790e-03, + 4.331110045313835144e-03, + 4.195412155240774155e-03, + 4.065836314111948013e-03, + 3.942019306123256683e-03, + 3.823625156655907631e-03, + 3.710342105478048325e-03, + 3.601880045607686043e-03, + 3.497969126328825951e-03, + 3.398358589038252831e-03, + 3.302814206108450890e-03, + 3.211117815226316452e-03, + 3.123065689578652382e-03, + 3.038466908037662506e-03, + 2.957143820822238922e-03, + 2.878929022699594498e-03, + 2.803666517138481140e-03, + 2.731209388002753258e-03, + 2.661420265212655067e-03, + 2.594169462099671364e-03, + 2.529335673898458481e-03, + 2.466804347932338715e-03, + 2.406467916443943977e-03, + 2.348224865272641182e-03, + 2.291979501023888588e-03, + 2.237641252577304840e-03, + 2.185125369578599930e-03, + 2.134351292625069618e-03, + 2.085242420434951782e-03, + 2.037727274000644684e-03, + 1.991737401112914085e-03, + 1.947208424098789692e-03, + 1.904079108498990536e-03, + 1.862291363067924976e-03, + 1.821790123358368874e-03, + 1.782523351721465588e-03, + 1.744441338814795017e-03, + 1.707496936433017254e-03, + 1.671645324677228928e-03, + 1.636843895539641380e-03, + 1.603052020072937012e-03, + 1.570231164805591106e-03, + 1.538344309665262699e-03, + 1.507356646470725536e-03, + 1.477234647609293461e-03, + 1.447946298867464066e-03, + 1.419461332261562347e-03, + 1.391750527545809746e-03, + 1.364786177873611450e-03, + 1.338541740551590919e-03, + 1.312991953454911709e-03, + 1.288112369365990162e-03, + 1.263879938051104546e-03, + 1.240272307768464088e-03, + 1.217268407344818115e-03, + 1.194847747683525085e-03, + 1.172990887425839901e-03, + 1.151678967289626598e-03, + 1.130894292145967484e-03, + 1.110619399696588516e-03, + 1.090837991796433926e-03, + 1.071534119546413422e-03, + 1.052692648954689503e-03, + 1.034298795275390148e-03, + 1.016338705085217953e-03, +]; + +pub const MB_MID: [f32; 436] = [ + 0.000000000000000000e+00, + 5.484303832054138184e-02, + 2.145882844924926758e-01, + 4.431562721729278564e-01, + 6.601346731185913086e-01, + 8.083253502845764160e-01, + 8.922405838966369629e-01, + 9.370875954627990723e-01, + 9.612857103347778320e-01, + 9.747377038002014160e-01, + 9.823975563049316406e-01, + 9.867538809776306152e-01, + 9.890908002853393555e-01, + 9.900894165039062500e-01, + 9.901173710823059082e-01, + 9.893724322319030762e-01, + 9.879567623138427734e-01, + 9.859169125556945801e-01, + 9.832661747932434082e-01, + 9.799981117248535156e-01, + 9.760945439338684082e-01, + 9.715310931205749512e-01, + 9.662809967994689941e-01, + 9.603177309036254883e-01, + 9.536173343658447266e-01, + 9.461598992347717285e-01, + 9.379312396049499512e-01, + 9.289238452911376953e-01, + 9.191375374794006348e-01, + 9.085804820060729980e-01, + 8.972689509391784668e-01, + 8.852276802062988281e-01, + 8.724895715713500977e-01, + 8.590949177742004395e-01, + 8.450911045074462891e-01, + 8.305312991142272949e-01, + 8.154735565185546875e-01, + 7.999796271324157715e-01, + 7.841138839721679688e-01, + 7.679418325424194336e-01, + 7.515291571617126465e-01, + 7.349407076835632324e-01, + 7.182393074035644531e-01, + 7.014852762222290039e-01, + 6.847353577613830566e-01, + 6.680425405502319336e-01, + 6.514554023742675781e-01, + 6.350182890892028809e-01, + 6.187705993652343750e-01, + 6.027473211288452148e-01, + 5.869788527488708496e-01, + 5.714913010597229004e-01, + 5.563064813613891602e-01, + 5.414423346519470215e-01, + 5.269134044647216797e-01, + 5.127305984497070312e-01, + 4.989021718502044678e-01, + 4.854334294795989990e-01, + 4.723274707794189453e-01, + 4.595851600170135498e-01, + 4.472056329250335693e-01, + 4.351863563060760498e-01, + 4.235235452651977539e-01, + 4.122121930122375488e-01, + 4.012463688850402832e-01, + 3.906193375587463379e-01, + 3.803237974643707275e-01, + 3.703518807888031006e-01, + 3.606953620910644531e-01, + 3.513457775115966797e-01, + 3.422944545745849609e-01, + 3.335325717926025391e-01, + 3.250513374805450439e-01, + 3.168419301509857178e-01, + 3.088955581188201904e-01, + 3.012036085128784180e-01, + 2.937575280666351318e-01, + 2.865489721298217773e-01, + 2.795696854591369629e-01, + 2.728117406368255615e-01, + 2.662672996520996094e-01, + 2.599288225173950195e-01, + 2.537889182567596436e-01, + 2.478404790163040161e-01, + 2.420766055583953857e-01, + 2.364906370639801025e-01, + 2.310761213302612305e-01, + 2.258268594741821289e-01, + 2.207368612289428711e-01, + 2.158003300428390503e-01, + 2.110117375850677490e-01, + 2.063657194375991821e-01, + 2.018571346998214722e-01, + 1.974810212850570679e-01, + 1.932326406240463257e-01, + 1.891073882579803467e-01, + 1.851008832454681396e-01, + 1.812089234590530396e-01, + 1.774274110794067383e-01, + 1.737524867057800293e-01, + 1.701803803443908691e-01, + 1.667075157165527344e-01, + 1.633304357528686523e-01, + 1.600458025932312012e-01, + 1.568504720926284790e-01, + 1.537413448095321655e-01, + 1.507155001163482666e-01, + 1.477701216936111450e-01, + 1.449024975299835205e-01, + 1.421100050210952759e-01, + 1.393901556730270386e-01, + 1.367405354976654053e-01, + 1.341588497161865234e-01, + 1.316428482532501221e-01, + 1.291904002428054810e-01, + 1.267994791269302368e-01, + 1.244680657982826233e-01, + 1.221942901611328125e-01, + 1.199763119220733643e-01, + 1.178123727440834045e-01, + 1.157007738947868347e-01, + 1.136398911476135254e-01, + 1.116281598806381226e-01, + 1.096640527248382568e-01, + 1.077461317181587219e-01, + 1.058729812502861023e-01, + 1.040432527661323547e-01, + 1.022556498646736145e-01, + 1.005089133977890015e-01, + 9.880182892084121704e-02, + 9.713324159383773804e-02, + 9.550201892852783203e-02, + 9.390708059072494507e-02, + 9.234736859798431396e-02, + 9.082188457250595093e-02, + 8.932964503765106201e-02, + 8.786971122026443481e-02, + 8.644117414951324463e-02, + 8.504315465688705444e-02, + 8.367481082677841187e-02, + 8.233531564474105835e-02, + 8.102387934923171997e-02, + 7.973973453044891357e-02, + 7.848215103149414062e-02, + 7.725039869546890259e-02, + 7.604379951953887939e-02, + 7.486167550086975098e-02, + 7.370338588953018188e-02, + 7.256829738616943359e-02, + 7.145580649375915527e-02, + 7.036532461643218994e-02, + 6.929629296064376831e-02, + 6.824815273284912109e-02, + 6.722036749124526978e-02, + 6.621243059635162354e-02, + 6.522383540868759155e-02, + 6.425409764051437378e-02, + 6.330274790525436401e-02, + 6.236933916807174683e-02, + 6.145342066884040833e-02, + 6.055456772446632385e-02, + 5.967236310243606567e-02, + 5.880640447139739990e-02, + 5.795630440115928650e-02, + 5.712168291211128235e-02, + 5.630216747522354126e-02, + 5.549740418791770935e-02, + 5.470704659819602966e-02, + 5.393075942993164062e-02, + 5.316821485757827759e-02, + 5.241909250617027283e-02, + 5.168308690190315247e-02, + 5.095989629626274109e-02, + 5.024923011660575867e-02, + 4.955080896615982056e-02, + 4.886434972286224365e-02, + 4.818959161639213562e-02, + 4.752627387642860413e-02, + 4.687413945794105530e-02, + 4.623294621706008911e-02, + 4.560245200991630554e-02, + 4.498242959380149841e-02, + 4.437264427542686462e-02, + 4.377287998795509338e-02, + 4.318292438983917236e-02, + 4.260256513953208923e-02, + 4.203159734606742859e-02, + 4.146982729434967041e-02, + 4.091706126928329468e-02, + 4.037310928106307983e-02, + 3.983778879046440125e-02, + 3.931092470884323120e-02, + 3.879234194755554199e-02, + 3.828186541795730591e-02, + 3.777933865785598755e-02, + 3.728459775447845459e-02, + 3.679748624563217163e-02, + 3.631784766912460327e-02, + 3.584554046392440796e-02, + 3.538041189312934875e-02, + 3.492232412099838257e-02, + 3.447113931179046631e-02, + 3.402671962976455688e-02, + 3.358893841505050659e-02, + 3.315766528248786926e-02, + 3.273276984691619873e-02, + 3.231413662433624268e-02, + 3.190164640545845032e-02, + 3.149517625570297241e-02, + 3.109461814165115356e-02, + 3.069985844194889069e-02, + 3.031078912317752838e-02, + 2.992730587720870972e-02, + 2.954930439591407776e-02, + 2.917668223381042480e-02, + 2.880934253334999084e-02, + 2.844718843698501587e-02, + 2.809012494981288910e-02, + 2.773806080222129822e-02, + 2.739090472459793091e-02, + 2.704856917262077332e-02, + 2.671097032725811005e-02, + 2.637802064418792725e-02, + 2.604964002966880798e-02, + 2.572574838995933533e-02, + 2.540626563131809235e-02, + 2.509111538529396057e-02, + 2.478022314608097076e-02, + 2.447351627051830292e-02, + 2.417091839015483856e-02, + 2.387236431241035461e-02, + 2.357778325676918030e-02, + 2.328710630536079407e-02, + 2.300026826560497284e-02, + 2.271720580756664276e-02, + 2.243785560131072998e-02, + 2.216215431690216064e-02, + 2.189004234969615936e-02, + 2.162146009504795074e-02, + 2.135634794831275940e-02, + 2.109465189278125763e-02, + 2.083631604909896851e-02, + 2.058128453791141510e-02, + 2.032950334250926971e-02, + 2.008092030882835388e-02, + 1.983548700809478760e-02, + 1.959314942359924316e-02, + 1.935386098921298981e-02, + 1.911757141351699829e-02, + 1.888423413038253784e-02, + 1.865380443632602692e-02, + 1.842623576521873474e-02, + 1.820148341357707977e-02, + 1.797950267791748047e-02, + 1.776025258004665375e-02, + 1.754369214177131653e-02, + 1.732977665960788727e-02, + 1.711846888065338135e-02, + 1.690972968935966492e-02, + 1.670351624488830566e-02, + 1.649979501962661743e-02, + 1.629852689802646637e-02, + 1.609967462718486786e-02, + 1.590320467948913574e-02, + 1.570907793939113617e-02, + 1.551726460456848145e-02, + 1.532772649079561234e-02, + 1.514043379575014114e-02, + 1.495535112917423248e-02, + 1.477244868874549866e-02, + 1.459169294685125351e-02, + 1.441305503249168396e-02, + 1.423650421202182770e-02, + 1.406200975179672241e-02, + 1.388954278081655502e-02, + 1.371907535940408707e-02, + 1.355057954788208008e-02, + 1.338402647525072098e-02, + 1.321939006447792053e-02, + 1.305664423853158951e-02, + 1.289576105773448944e-02, + 1.273671537637710571e-02, + 1.257948298007249832e-02, + 1.242403872311115265e-02, + 1.227035839110612869e-02, + 1.211841683834791183e-02, + 1.196819264441728592e-02, + 1.181966066360473633e-02, + 1.167279947549104691e-02, + 1.152758672833442688e-02, + 1.138400007039308548e-02, + 1.124201901257038116e-02, + 1.110162120312452316e-02, + 1.096278615295886993e-02, + 1.082549430429935455e-02, + 1.068972423672676086e-02, + 1.055545732378959656e-02, + 1.042267400771379471e-02, + 1.029135473072528839e-02, + 1.016148086637258530e-02, + 1.003303471952676773e-02, + 9.905997663736343384e-03, + 9.780352003872394562e-03, + 9.656080044806003571e-03, + 9.533165022730827332e-03, + 9.411589242517948151e-03, + 9.291336871683597565e-03, + 9.172391146421432495e-03, + 9.054736234247684479e-03, + 8.938355371356010437e-03, + 8.823234587907791138e-03, + 8.709357120096683502e-03, + 8.596708066761493683e-03, + 8.485274389386177063e-03, + 8.375039324164390564e-03, + 8.265988901257514954e-03, + 8.158110082149505615e-03, + 8.051387965679168701e-03, + 7.945809513330459595e-03, + 7.841360755264759064e-03, + 7.738029584288597107e-03, + 7.635801564902067184e-03, + 7.534664124250411987e-03, + 7.434605620801448822e-03, + 7.335613016039133072e-03, + 7.237673737108707428e-03, + 7.140776608139276505e-03, + 7.044909056276082993e-03, + 6.950059439986944199e-03, + 6.856217049062252045e-03, + 6.763370241969823837e-03, + 6.671507377177476883e-03, + 6.580618675798177719e-03, + 6.490692030638456345e-03, + 6.401717662811279297e-03, + 6.313684862107038498e-03, + 6.226583849638700485e-03, + 6.140403915196657181e-03, + 6.055135279893875122e-03, + 5.970768164843320847e-03, + 5.887292791157960892e-03, + 5.804700311273336411e-03, + 5.722980480641126633e-03, + 5.642124451696872711e-03, + 5.562122911214828491e-03, + 5.482967477291822433e-03, + 5.404648836702108383e-03, + 5.327158607542514801e-03, + 5.250488407909870148e-03, + 5.174628924578428268e-03, + 5.099573172628879547e-03, + 5.025311838835477829e-03, + 4.951837472617626190e-03, + 4.879142157733440399e-03, + 4.807217977941036224e-03, + 4.736057482659816742e-03, + 4.665652755647897720e-03, + 4.595996346324682236e-03, + 4.527080804109573364e-03, + 4.458899609744548798e-03, + 4.391444846987724304e-03, + 4.324709996581077576e-03, + 4.258688073605298996e-03, + 4.193371627479791641e-03, + 4.128755070269107819e-03, + 4.064830951392650604e-03, + 4.001592751592397690e-03, + 3.939034417271614075e-03, + 3.877149429172277451e-03, + 3.815931500867009163e-03, + 3.755374811589717865e-03, + 3.695473074913024902e-03, + 3.636220237240195274e-03, + 3.577610477805137634e-03, + 3.519637975841760635e-03, + 3.462297376245260239e-03, + 3.405582625418901443e-03, + 3.349488368257880211e-03, + 3.294009016826748848e-03, + 3.239139448851346970e-03, + 3.184874076396226883e-03, + 3.131208010017871857e-03, + 3.078135894611477852e-03, + 3.025652607902884483e-03, + 2.973753027617931366e-03, + 2.922432729974389076e-03, + 2.871686592698097229e-03, + 2.821509726345539093e-03, + 2.771897474303841591e-03, + 2.722845179960131645e-03, + 2.674348419532179832e-03, + 2.626402536407113075e-03, + 2.579003339633345604e-03, + 2.532146172598004341e-03, + 2.485826611518859863e-03, + 2.440040931105613708e-03, + 2.394784474745392799e-03, + 2.350053284317255020e-03, + 2.305843401700258255e-03, + 2.262150868773460388e-03, + 2.218971261754631996e-03, + 2.176301321014761925e-03, + 2.134136855602264404e-03, + 2.092474373057484627e-03, + 2.051309682428836823e-03, + 2.010639756917953491e-03, + 1.970460405573248863e-03, + 1.930768485181033611e-03, + 1.891560270451009274e-03, + 1.852832501754164696e-03, + 1.814581686630845070e-03, + 1.776804565452039242e-03, + 1.739497645758092403e-03, + 1.702658017165958881e-03, + 1.666282187215983868e-03, + 1.630367245525121689e-03, + 1.594909932464361191e-03, + 1.559907221235334873e-03, + 1.525356317870318890e-03, + 1.491254079155623913e-03, + 1.457597594708204269e-03, + 1.424384070560336113e-03, + 1.391610712744295597e-03, + 1.359274727292358875e-03, + 1.327373436652123928e-03, + 1.295904046855866909e-03, + 1.264864113181829453e-03, + 1.234250725246965885e-03, + 1.204061671160161495e-03, + 1.174294156953692436e-03, + 1.144945970736443996e-03, + 1.116014434956014156e-03, + 1.087497337721288204e-03, + 1.059392234310507774e-03, + 1.031696796417236328e-03, + 1.004408812150359154e-03, +]; + +pub const MB_HIGH: [f32; 512] = [ + 0.000000000000000000e+00, + 0.000000000000000000e+00, + 2.172258449718356133e-03, + 4.887687973678112030e-03, + 8.689380250871181488e-03, + 1.357718463987112045e-02, + 1.955056190490722656e-02, + 2.660831995308399200e-02, + 3.474830836057662964e-02, + 4.396704211831092834e-02, + 5.425927042961120605e-02, + 6.561752408742904663e-02, + 7.803158462047576904e-02, + 9.148794412612915039e-02, + 1.059692427515983582e-01, + 1.214536651968955994e-01, + 1.379144042730331421e-01, + 1.553190946578979492e-01, + 1.736293584108352661e-01, + 1.928003281354904175e-01, + 2.127804309129714966e-01, + 2.335111647844314575e-01, + 2.549270987510681152e-01, + 2.769560813903808594e-01, + 2.995195686817169189e-01, + 3.225332498550415039e-01, + 3.459078371524810791e-01, + 3.695500493049621582e-01, + 3.933637440204620361e-01, + 4.172514081001281738e-01, + 4.411152899265289307e-01, + 4.648591876029968262e-01, + 4.883896410465240479e-01, + 5.116174221038818359e-01, + 5.344589948654174805e-01, + 5.568372607231140137e-01, + 5.786827802658081055e-01, + 5.999343991279602051e-01, + 6.205396056175231934e-01, + 6.404548883438110352e-01, + 6.596455574035644531e-01, + 6.780856847763061523e-01, + 6.957575082778930664e-01, + 7.126512527465820312e-01, + 7.287640571594238281e-01, + 7.440994977951049805e-01, + 7.586667537689208984e-01, + 7.724798917770385742e-01, + 7.855569720268249512e-01, + 7.979193925857543945e-01, + 8.095912933349609375e-01, + 8.205987215042114258e-01, + 8.309690356254577637e-01, + 8.407307863235473633e-01, + 8.499128818511962891e-01, + 8.585442304611206055e-01, + 8.666536808013916016e-01, + 8.742695450782775879e-01, + 8.814195990562438965e-01, + 8.881306052207946777e-01, + 8.944284319877624512e-01, + 9.003379940986633301e-01, + 9.058829545974731445e-01, + 9.110860228538513184e-01, + 9.159685373306274414e-01, + 9.205508232116699219e-01, + 9.248521327972412109e-01, + 9.288904070854187012e-01, + 9.326826930046081543e-01, + 9.362448453903198242e-01, + 9.395919442176818848e-01, + 9.427378773689270020e-01, + 9.456956982612609863e-01, + 9.484778046607971191e-01, + 9.510954618453979492e-01, + 9.535593986511230469e-01, + 9.558795690536499023e-01, + 9.580652117729187012e-01, + 9.601250886917114258e-01, + 9.620671272277832031e-01, + 9.638989567756652832e-01, + 9.656275510787963867e-01, + 9.672594070434570312e-01, + 9.688006639480590820e-01, + 9.702569842338562012e-01, + 9.716336131095886230e-01, + 9.729354977607727051e-01, + 9.741672873497009277e-01, + 9.753332734107971191e-01, + 9.764373898506164551e-01, + 9.774834513664245605e-01, + 9.784748554229736328e-01, + 9.794148802757263184e-01, + 9.803066253662109375e-01, + 9.811528921127319336e-01, + 9.819563627243041992e-01, + 9.827194809913635254e-01, + 9.834445714950561523e-01, + 9.841338396072387695e-01, + 9.847893118858337402e-01, + 9.854128956794738770e-01, + 9.860063791275024414e-01, + 9.865713715553283691e-01, + 9.871095418930053711e-01, + 9.876223206520080566e-01, + 9.881110787391662598e-01, + 9.885771274566650391e-01, + 9.890217185020446777e-01, + 9.894459247589111328e-01, + 9.898508787155151367e-01, + 9.902375340461730957e-01, + 9.906069040298461914e-01, + 9.909598231315612793e-01, + 9.912971854209899902e-01, + 9.916197657585144043e-01, + 9.919283390045166016e-01, + 9.922236204147338867e-01, + 9.925062060356140137e-01, + 9.927767515182495117e-01, + 9.930358529090881348e-01, + 9.932841062545776367e-01, + 9.935219883918762207e-01, + 9.937500357627868652e-01, + 9.939687252044677734e-01, + 9.941784143447875977e-01, + 9.943796396255493164e-01, + 9.945727586746215820e-01, + 9.947581291198730469e-01, + 9.949361681938171387e-01, + 9.951071143150329590e-01, + 9.952713847160339355e-01, + 9.954292178153991699e-01, + 9.955809712409973145e-01, + 9.957268238067626953e-01, + 9.958671331405639648e-01, + 9.960021376609802246e-01, + 9.961319565773010254e-01, + 9.962569475173950195e-01, + 9.963772892951965332e-01, + 9.964931011199951172e-01, + 9.966046810150146484e-01, + 9.967121481895446777e-01, + 9.968157410621643066e-01, + 9.969155192375183105e-01, + 9.970117211341857910e-01, + 9.971044659614562988e-01, + 9.971939325332641602e-01, + 9.972801804542541504e-01, + 9.973634481430053711e-01, + 9.974437355995178223e-01, + 9.975212812423706055e-01, + 9.975961446762084961e-01, + 9.976683855056762695e-01, + 9.977381229400634766e-01, + 9.978055357933044434e-01, + 9.978706836700439453e-01, + 9.979335665702819824e-01, + 9.979943633079528809e-01, + 9.980531334877014160e-01, + 9.981099367141723633e-01, + 9.981648921966552734e-01, + 9.982179999351501465e-01, + 9.982693791389465332e-01, + 9.983191490173339844e-01, + 9.983672499656677246e-01, + 9.984138011932373047e-01, + 9.984588027000427246e-01, + 9.985024333000183105e-01, + 9.985446929931640625e-01, + 9.985855817794799805e-01, + 9.986251592636108398e-01, + 9.986635446548461914e-01, + 9.987006783485412598e-01, + 9.987366795539855957e-01, + 9.987716078758239746e-01, + 9.988054037094116211e-01, + 9.988381862640380859e-01, + 9.988700151443481445e-01, + 9.989008307456970215e-01, + 9.989306926727294922e-01, + 9.989596605300903320e-01, + 9.989877939224243164e-01, + 9.990150332450866699e-01, + 9.990414977073669434e-01, + 9.990671873092651367e-01, + 9.990921020507812500e-01, + 9.991163015365600586e-01, + 9.991397857666015625e-01, + 9.991625547409057617e-01, + 9.991846680641174316e-01, + 9.992061853408813477e-01, + 9.992270469665527344e-01, + 9.992473125457763672e-01, + 9.992669820785522461e-01, + 9.992861151695251465e-01, + 9.993047118186950684e-01, + 9.993227720260620117e-01, + 9.993402957916259766e-01, + 9.993573427200317383e-01, + 9.993739128112792969e-01, + 9.993900060653686523e-01, + 9.994056820869445801e-01, + 9.994209408760070801e-01, + 9.994357228279113770e-01, + 9.994501471519470215e-01, + 9.994641542434692383e-01, + 9.994777441024780273e-01, + 9.994910359382629395e-01, + 9.995039105415344238e-01, + 9.995164275169372559e-01, + 9.995286464691162109e-01, + 9.995405077934265137e-01, + 9.995520710945129395e-01, + 9.995633363723754883e-01, + 9.995742440223693848e-01, + 9.995849132537841797e-01, + 9.995952844619750977e-01, + 9.996054172515869141e-01, + 9.996152520179748535e-01, + 9.996247887611389160e-01, + 9.996341466903686523e-01, + 9.996432065963745117e-01, + 9.996520280838012695e-01, + 9.996606707572937012e-01, + 9.996690154075622559e-01, + 9.996771812438964844e-01, + 9.996851682662963867e-01, + 9.996929168701171875e-01, + 9.997004866600036621e-01, + 9.997078180313110352e-01, + 9.997150301933288574e-01, + 9.997220039367675781e-01, + 9.997287988662719727e-01, + 9.997354745864868164e-01, + 9.997419118881225586e-01, + 9.997482299804687500e-01, + 9.997543692588806152e-01, + 9.997603893280029297e-01, + 9.997662305831909180e-01, + 9.997719526290893555e-01, + 9.997774958610534668e-01, + 9.997829198837280273e-01, + 9.997881650924682617e-01, + 9.997933506965637207e-01, + 9.997983574867248535e-01, + 9.998032450675964355e-01, + 9.998080134391784668e-01, + 9.998127222061157227e-01, + 9.998172521591186523e-01, + 9.998216629028320312e-01, + 9.998260140419006348e-01, + 9.998302459716796875e-01, + 9.998343586921691895e-01, + 9.998383522033691406e-01, + 9.998422861099243164e-01, + 9.998461008071899414e-01, + 9.998498558998107910e-01, + 9.998534917831420898e-01, + 9.998570084571838379e-01, + 9.998604655265808105e-01, + 9.998638629913330078e-01, + 9.998671412467956543e-01, + 9.998704195022583008e-01, + 9.998735189437866211e-01, + 9.998766183853149414e-01, + 9.998795986175537109e-01, + 9.998825192451477051e-01, + 9.998853802680969238e-01, + 9.998881816864013672e-01, + 9.998908638954162598e-01, + 9.998935461044311523e-01, + 9.998961091041564941e-01, + 9.998986721038818359e-01, + 9.999011158943176270e-01, + 9.999035596847534180e-01, + 9.999058842658996582e-01, + 9.999082088470458984e-01, + 9.999104142189025879e-01, + 9.999126195907592773e-01, + 9.999147653579711914e-01, + 9.999168515205383301e-01, + 9.999188780784606934e-01, + 9.999209046363830566e-01, + 9.999228119850158691e-01, + 9.999247193336486816e-01, + 9.999265670776367188e-01, + 9.999283552169799805e-01, + 9.999301433563232422e-01, + 9.999318718910217285e-01, + 9.999335408210754395e-01, + 9.999352097511291504e-01, + 9.999368190765380859e-01, + 9.999383687973022461e-01, + 9.999399185180664062e-01, + 9.999414086341857910e-01, + 9.999428391456604004e-01, + 9.999442696571350098e-01, + 9.999457001686096191e-01, + 9.999470710754394531e-01, + 9.999483823776245117e-01, + 9.999496936798095703e-01, + 9.999509453773498535e-01, + 9.999521970748901367e-01, + 9.999533891677856445e-01, + 9.999545812606811523e-01, + 9.999557137489318848e-01, + 9.999568462371826172e-01, + 9.999579191207885742e-01, + 9.999589920043945312e-01, + 9.999600648880004883e-01, + 9.999610781669616699e-01, + 9.999620914459228516e-01, + 9.999630451202392578e-01, + 9.999639987945556641e-01, + 9.999649524688720703e-01, + 9.999658465385437012e-01, + 9.999667406082153320e-01, + 9.999675750732421875e-01, + 9.999684095382690430e-01, + 9.999692440032958984e-01, + 9.999700784683227539e-01, + 9.999708533287048340e-01, + 9.999716281890869141e-01, + 9.999723434448242188e-01, + 9.999731183052062988e-01, + 9.999738335609436035e-01, + 9.999744892120361328e-01, + 9.999752044677734375e-01, + 9.999758601188659668e-01, + 9.999765157699584961e-01, + 9.999771118164062500e-01, + 9.999777674674987793e-01, + 9.999783635139465332e-01, + 9.999789595603942871e-01, + 9.999794960021972656e-01, + 9.999800920486450195e-01, + 9.999806284904479980e-01, + 9.999811649322509766e-01, + 9.999816417694091797e-01, + 9.999821782112121582e-01, + 9.999826550483703613e-01, + 9.999831318855285645e-01, + 9.999836087226867676e-01, + 9.999840855598449707e-01, + 9.999845027923583984e-01, + 9.999849796295166016e-01, + 9.999853968620300293e-01, + 9.999858140945434570e-01, + 9.999862313270568848e-01, + 9.999865889549255371e-01, + 9.999870061874389648e-01, + 9.999873638153076172e-01, + 9.999877214431762695e-01, + 9.999880790710449219e-01, + 9.999884366989135742e-01, + 9.999887943267822266e-01, + 9.999890923500061035e-01, + 9.999894499778747559e-01, + 9.999897480010986328e-01, + 9.999900460243225098e-01, + 9.999903440475463867e-01, + 9.999906420707702637e-01, + 9.999909400939941406e-01, + 9.999911785125732422e-01, + 9.999914765357971191e-01, + 9.999917149543762207e-01, + 9.999920129776000977e-01, + 9.999922513961791992e-01, + 9.999924898147583008e-01, + 9.999927282333374023e-01, + 9.999929666519165039e-01, + 9.999931454658508301e-01, + 9.999933838844299316e-01, + 9.999936223030090332e-01, + 9.999938011169433594e-01, + 9.999939799308776855e-01, + 9.999942183494567871e-01, + 9.999943971633911133e-01, + 9.999945759773254395e-01, + 9.999947547912597656e-01, + 9.999949336051940918e-01, + 9.999951124191284180e-01, + 9.999952912330627441e-01, + 9.999954104423522949e-01, + 9.999955892562866211e-01, + 9.999957084655761719e-01, + 9.999958872795104980e-01, + 9.999960064888000488e-01, + 9.999961853027343750e-01, + 9.999963045120239258e-01, + 9.999964237213134766e-01, + 9.999965429306030273e-01, + 9.999966621398925781e-01, + 9.999967813491821289e-01, + 9.999969005584716797e-01, + 9.999970197677612305e-01, + 9.999971389770507812e-01, + 9.999972581863403320e-01, + 9.999973177909851074e-01, + 9.999974370002746582e-01, + 9.999975562095642090e-01, + 9.999976158142089844e-01, + 9.999977350234985352e-01, + 9.999977946281433105e-01, + 9.999979138374328613e-01, + 9.999979734420776367e-01, + 9.999980330467224121e-01, + 9.999981522560119629e-01, + 9.999982118606567383e-01, + 9.999982714653015137e-01, + 9.999983310699462891e-01, + 9.999984502792358398e-01, + 9.999985098838806152e-01, + 9.999985694885253906e-01, + 9.999986290931701660e-01, + 9.999986886978149414e-01, + 9.999987483024597168e-01, + 9.999988079071044922e-01, + 9.999988079071044922e-01, + 9.999988675117492676e-01, + 9.999989271163940430e-01, + 9.999989867210388184e-01, + 9.999990463256835938e-01, + 9.999991059303283691e-01, + 9.999991059303283691e-01, + 9.999991655349731445e-01, + 9.999992251396179199e-01, + 9.999992251396179199e-01, + 9.999992847442626953e-01, + 9.999992847442626953e-01, + 9.999993443489074707e-01, + 9.999994039535522461e-01, + 9.999994039535522461e-01, + 9.999994635581970215e-01, + 9.999994635581970215e-01, + 9.999995231628417969e-01, + 9.999995231628417969e-01, + 9.999995231628417969e-01, + 9.999995827674865723e-01, + 9.999995827674865723e-01, + 9.999996423721313477e-01, + 9.999996423721313477e-01, + 9.999996423721313477e-01, + 9.999997019767761230e-01, + 9.999997019767761230e-01, + 9.999997019767761230e-01, + 9.999997615814208984e-01, + 9.999997615814208984e-01, + 9.999997615814208984e-01, + 9.999997615814208984e-01, + 9.999998211860656738e-01, + 9.999998211860656738e-01, + 9.999998211860656738e-01, + 9.999998211860656738e-01, + 9.999998211860656738e-01, + 9.999998807907104492e-01, + 9.999998807907104492e-01, + 9.999998807907104492e-01, + 9.999998807907104492e-01, + 9.999998807907104492e-01, + 9.999998807907104492e-01, + 9.999998807907104492e-01, + 9.999999403953552246e-01, + 9.999999403953552246e-01, + 9.999999403953552246e-01, + 9.999999403953552246e-01, + 9.999999403953552246e-01, + 9.999999403953552246e-01, + 9.999999403953552246e-01, + 9.999999403953552246e-01, + 9.999999403953552246e-01, + 9.999999403953552246e-01, + 9.999999403953552246e-01, + 9.999999403953552246e-01, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, + 1.000000000000000000e+00, +]; + +pub const HANN_280: [f32; 280] = [ + 0.0, + 0.00012678649, + 0.0005070817, + 0.0011406926, + 0.002027298, + 0.0031664486, + 0.004557566, + 0.006199945, + 0.008092753, + 0.010235029, + 0.012625689, + 0.015263517, + 0.018147178, + 0.02127521, + 0.024646023, + 0.02825791, + 0.03210904, + 0.03619746, + 0.040521093, + 0.045077752, + 0.049865123, + 0.054880776, + 0.06012217, + 0.06558664, + 0.071271434, + 0.07717365, + 0.083290294, + 0.08961828, + 0.096154384, + 0.1028953, + 0.10983761, + 0.11697778, + 0.1243122, + 0.13183714, + 0.13954881, + 0.14744328, + 0.15551654, + 0.1637645, + 0.17218299, + 0.18076773, + 0.18951437, + 0.19841845, + 0.2074755, + 0.2166809, + 0.22602998, + 0.235518, + 0.24514015, + 0.25489154, + 0.26476726, + 0.27476227, + 0.2848715, + 0.29508984, + 0.30541208, + 0.31583303, + 0.32634738, + 0.3369498, + 0.34763488, + 0.35839725, + 0.36923143, + 0.38013193, + 0.39109322, + 0.40210974, + 0.4131759, + 0.4242861, + 0.4354347, + 0.44661605, + 0.45782447, + 0.46905428, + 0.48029977, + 0.49155527, + 0.502815, + 0.5140734, + 0.5253246, + 0.5365629, + 0.5477828, + 0.5589784, + 0.57014406, + 0.58127415, + 0.592363, + 0.60340506, + 0.61439466, + 0.6253263, + 0.6361943, + 0.6469933, + 0.65771765, + 0.6683621, + 0.67892116, + 0.68938947, + 0.6997617, + 0.71003264, + 0.7201971, + 0.7302498, + 0.7401858, + 0.75, + 0.75968736, + 0.76924306, + 0.7786622, + 0.7879401, + 0.7970719, + 0.806053, + 0.81487894, + 0.82354516, + 0.8320473, + 0.840381, + 0.8485422, + 0.85652655, + 0.8643301, + 0.8719489, + 0.87937903, + 0.8866168, + 0.8936585, + 0.90050054, + 0.9071395, + 0.91357195, + 0.9197946, + 0.92580444, + 0.9315983, + 0.9371733, + 0.9425266, + 0.94765544, + 0.95255727, + 0.95722955, + 0.96167, + 0.9658763, + 0.9698463, + 0.97357804, + 0.9770696, + 0.98031926, + 0.9833253, + 0.9860862, + 0.9886006, + 0.99086726, + 0.9928849, + 0.9946526, + 0.99616945, + 0.9974347, + 0.9984476, + 0.99920774, + 0.99971473, + 0.9999683, + 0.9999683, + 0.99971473, + 0.99920774, + 0.9984476, + 0.9974347, + 0.99616945, + 0.9946526, + 0.9928849, + 0.99086726, + 0.9886006, + 0.9860862, + 0.9833253, + 0.98031926, + 0.9770696, + 0.97357804, + 0.9698463, + 0.9658763, + 0.96167, + 0.95722955, + 0.95255727, + 0.94765544, + 0.9425266, + 0.9371733, + 0.9315983, + 0.92580444, + 0.9197946, + 0.91357195, + 0.9071395, + 0.90050054, + 0.8936585, + 0.8866168, + 0.87937903, + 0.8719489, + 0.8643301, + 0.85652655, + 0.8485422, + 0.840381, + 0.8320473, + 0.82354516, + 0.81487894, + 0.806053, + 0.7970719, + 0.7879401, + 0.7786622, + 0.76924306, + 0.75968736, + 0.75, + 0.7401858, + 0.7302498, + 0.7201971, + 0.71003264, + 0.6997617, + 0.68938947, + 0.67892116, + 0.6683621, + 0.65771765, + 0.6469933, + 0.6361943, + 0.6253263, + 0.61439466, + 0.60340506, + 0.592363, + 0.58127415, + 0.57014406, + 0.5589784, + 0.5477828, + 0.5365629, + 0.5253246, + 0.5140734, + 0.502815, + 0.49155527, + 0.48029977, + 0.46905428, + 0.45782447, + 0.44661605, + 0.4354347, + 0.4242861, + 0.4131759, + 0.40210974, + 0.39109322, + 0.38013193, + 0.36923143, + 0.35839725, + 0.34763488, + 0.3369498, + 0.32634738, + 0.31583303, + 0.30541208, + 0.29508984, + 0.2848715, + 0.27476227, + 0.26476726, + 0.25489154, + 0.24514015, + 0.235518, + 0.22602998, + 0.2166809, + 0.2074755, + 0.19841845, + 0.18951437, + 0.18076773, + 0.17218299, + 0.1637645, + 0.15551654, + 0.14744328, + 0.13954881, + 0.13183714, + 0.1243122, + 0.11697778, + 0.10983761, + 0.1028953, + 0.096154384, + 0.08961828, + 0.083290294, + 0.07717365, + 0.071271434, + 0.06558664, + 0.06012217, + 0.054880776, + 0.049865123, + 0.045077752, + 0.040521093, + 0.03619746, + 0.03210904, + 0.02825791, + 0.024646023, + 0.02127521, + 0.018147178, + 0.015263517, + 0.012625689, + 0.010235029, + 0.008092753, + 0.006199945, + 0.004557566, + 0.0031664486, + 0.002027298, + 0.0011406926, + 0.0005070817, + 0.00012678649, + 0.0, +]; + +pub const HANN_2048: [f32; 2048] = [ + 0.0, + 2.3553948e-6, + 9.4215575e-6, + 2.119842e-5, + 3.7685873e-5, + 5.888376e-5, + 8.4791885e-5, + 0.000115409995, + 0.00015073782, + 0.000190775, + 0.00023552118, + 0.00028497592, + 0.0003391388, + 0.00039800923, + 0.00046158672, + 0.0005298706, + 0.00060286035, + 0.0006805552, + 0.0007629544, + 0.00085005723, + 0.0009418628, + 0.0010383703, + 0.0011395789, + 0.0012454875, + 0.0013560951, + 0.0014714007, + 0.0015914033, + 0.0017161017, + 0.0018454946, + 0.001979581, + 0.0021183596, + 0.0022618289, + 0.0024099876, + 0.0025628346, + 0.002720368, + 0.0028825868, + 0.0030494893, + 0.0032210737, + 0.0033973386, + 0.0035782822, + 0.003763903, + 0.003954199, + 0.0041491683, + 0.00434881, + 0.004553121, + 0.0047621, + 0.0049757445, + 0.0051940535, + 0.0054170243, + 0.005644655, + 0.0058769425, + 0.006113886, + 0.0063554826, + 0.0066017304, + 0.0068526263, + 0.0071081687, + 0.007368355, + 0.0076331827, + 0.007902649, + 0.008176751, + 0.008455488, + 0.008738856, + 0.009026852, + 0.009319474, + 0.009616719, + 0.009918584, + 0.010225066, + 0.010536163, + 0.010851871, + 0.011172188, + 0.01149711, + 0.011826635, + 0.012160759, + 0.01249948, + 0.012842793, + 0.013190697, + 0.013543187, + 0.0139002595, + 0.014261913, + 0.014628141, + 0.014998944, + 0.015374315, + 0.015754253, + 0.016138753, + 0.016527811, + 0.016921425, + 0.01731959, + 0.017722303, + 0.01812956, + 0.018541357, + 0.01895769, + 0.019378554, + 0.019803947, + 0.020233864, + 0.020668302, + 0.021107255, + 0.02155072, + 0.021998694, + 0.02245117, + 0.022908146, + 0.023369618, + 0.023835579, + 0.024306025, + 0.024780955, + 0.025260363, + 0.025744243, + 0.026232589, + 0.026725402, + 0.027222672, + 0.027724396, + 0.02823057, + 0.02874119, + 0.029256249, + 0.029775744, + 0.03029967, + 0.030828018, + 0.03136079, + 0.031897973, + 0.03243957, + 0.03298557, + 0.033535972, + 0.03409077, + 0.034649953, + 0.035213523, + 0.035781473, + 0.036353793, + 0.036930487, + 0.03751154, + 0.03809695, + 0.03868671, + 0.03928082, + 0.03987927, + 0.040482055, + 0.04108917, + 0.04170061, + 0.042316366, + 0.042936433, + 0.043560807, + 0.04418948, + 0.04482245, + 0.045459706, + 0.046101246, + 0.046747062, + 0.04739715, + 0.048051503, + 0.04871011, + 0.04937297, + 0.050040077, + 0.050711423, + 0.051387005, + 0.05206681, + 0.052750833, + 0.053439073, + 0.054131523, + 0.05482817, + 0.05552901, + 0.05623404, + 0.056943253, + 0.057656635, + 0.05837419, + 0.0590959, + 0.05982177, + 0.06055178, + 0.06128594, + 0.062024225, + 0.06276664, + 0.063513175, + 0.06426382, + 0.06501857, + 0.06577742, + 0.06654036, + 0.06730739, + 0.06807849, + 0.06885366, + 0.069632895, + 0.07041618, + 0.071203515, + 0.07199489, + 0.072790295, + 0.07358973, + 0.07439318, + 0.07520064, + 0.076012105, + 0.076827556, + 0.077647, + 0.078470424, + 0.07929782, + 0.08012918, + 0.08096449, + 0.081803754, + 0.08264696, + 0.08349409, + 0.08434515, + 0.08520012, + 0.086059004, + 0.08692179, + 0.08778846, + 0.08865902, + 0.08953345, + 0.09041175, + 0.09129391, + 0.092179924, + 0.09306978, + 0.09396346, + 0.09486097, + 0.095762305, + 0.09666744, + 0.09757638, + 0.098489106, + 0.09940562, + 0.100325905, + 0.101249956, + 0.10217776, + 0.10310932, + 0.104044616, + 0.10498364, + 0.105926394, + 0.10687286, + 0.107823014, + 0.108776875, + 0.10973442, + 0.110695645, + 0.11166054, + 0.112629086, + 0.11360128, + 0.11457712, + 0.1155566, + 0.11653969, + 0.1175264, + 0.118516706, + 0.119510606, + 0.1205081, + 0.12150916, + 0.122513786, + 0.123521976, + 0.124533705, + 0.12554897, + 0.12656778, + 0.12759009, + 0.12861592, + 0.12964524, + 0.13067806, + 0.13171434, + 0.13275412, + 0.13379733, + 0.134844, + 0.13589412, + 0.13694766, + 0.13800463, + 0.13906501, + 0.14012878, + 0.14119595, + 0.1422665, + 0.14334041, + 0.14441769, + 0.14549832, + 0.14658229, + 0.14766958, + 0.1487602, + 0.14985412, + 0.15095136, + 0.15205187, + 0.15315565, + 0.15426272, + 0.15537304, + 0.1564866, + 0.1576034, + 0.15872343, + 0.15984666, + 0.16097312, + 0.16210276, + 0.16323557, + 0.16437158, + 0.16551074, + 0.16665305, + 0.1677985, + 0.16894709, + 0.17009878, + 0.17125359, + 0.1724115, + 0.1735725, + 0.17473656, + 0.1759037, + 0.17707388, + 0.17824711, + 0.17942336, + 0.18060264, + 0.18178493, + 0.18297023, + 0.18415849, + 0.18534975, + 0.18654396, + 0.18774113, + 0.18894124, + 0.19014427, + 0.19135024, + 0.19255911, + 0.19377087, + 0.19498552, + 0.19620304, + 0.19742343, + 0.19864666, + 0.19987273, + 0.20110165, + 0.20233336, + 0.20356788, + 0.2048052, + 0.2060453, + 0.20728816, + 0.2085338, + 0.20978215, + 0.21103327, + 0.2122871, + 0.21354362, + 0.21480286, + 0.2160648, + 0.2173294, + 0.21859665, + 0.21986657, + 0.22113912, + 0.2224143, + 0.2236921, + 0.2249725, + 0.22625549, + 0.22754106, + 0.22882919, + 0.23011988, + 0.23141313, + 0.23270889, + 0.23400716, + 0.23530796, + 0.23661123, + 0.237917, + 0.23922524, + 0.24053593, + 0.24184906, + 0.24316463, + 0.24448262, + 0.24580301, + 0.2471258, + 0.24845096, + 0.24977851, + 0.2511084, + 0.25244066, + 0.25377524, + 0.25511214, + 0.25645134, + 0.25779283, + 0.25913662, + 0.26048267, + 0.26183096, + 0.2631815, + 0.2645343, + 0.2658893, + 0.2672465, + 0.2686059, + 0.26996747, + 0.27133122, + 0.27269712, + 0.27406517, + 0.27543533, + 0.27680764, + 0.278182, + 0.27955848, + 0.28093705, + 0.28231767, + 0.28370035, + 0.28508505, + 0.28647178, + 0.2878605, + 0.28925127, + 0.290644, + 0.2920387, + 0.29343536, + 0.29483396, + 0.29623452, + 0.29763696, + 0.29904133, + 0.30044758, + 0.30185574, + 0.30326575, + 0.3046776, + 0.3060913, + 0.30750683, + 0.30892417, + 0.31034333, + 0.31176424, + 0.31318694, + 0.3146114, + 0.31603763, + 0.31746554, + 0.31889522, + 0.3203266, + 0.32175964, + 0.32319438, + 0.3246308, + 0.32606885, + 0.32750854, + 0.32894987, + 0.3303928, + 0.33183733, + 0.33328345, + 0.33473113, + 0.3361804, + 0.33763117, + 0.3390835, + 0.3405373, + 0.34199265, + 0.34344947, + 0.34490776, + 0.34636754, + 0.34782875, + 0.34929138, + 0.35075545, + 0.35222092, + 0.35368776, + 0.355156, + 0.35662562, + 0.35809657, + 0.35956886, + 0.36104247, + 0.3625174, + 0.36399361, + 0.3654711, + 0.3669499, + 0.3684299, + 0.36991116, + 0.37139365, + 0.37287733, + 0.37436223, + 0.37584832, + 0.37733555, + 0.37882397, + 0.38031352, + 0.3818042, + 0.38329598, + 0.38478887, + 0.38628283, + 0.38777786, + 0.38927397, + 0.39077112, + 0.39226928, + 0.3937685, + 0.39526868, + 0.39676985, + 0.398272, + 0.3997751, + 0.40127915, + 0.40278414, + 0.40429002, + 0.40579683, + 0.40730453, + 0.4088131, + 0.4103225, + 0.41183275, + 0.41334385, + 0.41485575, + 0.41636848, + 0.41788197, + 0.41939625, + 0.42091128, + 0.42242706, + 0.42394358, + 0.4254608, + 0.42697874, + 0.42849734, + 0.43001664, + 0.43153659, + 0.4330572, + 0.43457842, + 0.43610024, + 0.4376227, + 0.4391457, + 0.44066933, + 0.4421935, + 0.4437182, + 0.44524345, + 0.4467692, + 0.44829544, + 0.4498222, + 0.4513494, + 0.45287707, + 0.45440522, + 0.45593375, + 0.45746273, + 0.4589921, + 0.46052185, + 0.46205196, + 0.46358243, + 0.46511325, + 0.4666444, + 0.4681759, + 0.46970764, + 0.4712397, + 0.472772, + 0.4743046, + 0.4758374, + 0.47737047, + 0.4789037, + 0.4804372, + 0.48197082, + 0.48350465, + 0.4850386, + 0.4865727, + 0.48810697, + 0.4896413, + 0.49117577, + 0.4927103, + 0.4942449, + 0.49577954, + 0.49731424, + 0.49884894, + 0.5003837, + 0.50191844, + 0.50345314, + 0.5049878, + 0.5065224, + 0.508057, + 0.50959146, + 0.51112586, + 0.51266015, + 0.51419437, + 0.5157284, + 0.5172623, + 0.518796, + 0.5203296, + 0.5218629, + 0.5233961, + 0.52492905, + 0.5264617, + 0.52799416, + 0.52952635, + 0.53105825, + 0.5325899, + 0.5341212, + 0.5356522, + 0.53718287, + 0.53871316, + 0.5402431, + 0.54177266, + 0.5433018, + 0.54483056, + 0.5463589, + 0.5478868, + 0.5494143, + 0.5509412, + 0.55246776, + 0.55399376, + 0.5555192, + 0.5570442, + 0.55856866, + 0.56009257, + 0.5616159, + 0.5631386, + 0.5646607, + 0.56618226, + 0.5677032, + 0.56922346, + 0.5707431, + 0.57226205, + 0.5737803, + 0.5752979, + 0.5768148, + 0.57833093, + 0.5798463, + 0.581361, + 0.5828749, + 0.58438796, + 0.5859003, + 0.5874118, + 0.5889225, + 0.59043235, + 0.5919413, + 0.5934494, + 0.5949567, + 0.596463, + 0.59796846, + 0.599473, + 0.6009766, + 0.6024792, + 0.60398084, + 0.60548156, + 0.6069812, + 0.6084799, + 0.6099776, + 0.6114742, + 0.61296976, + 0.6144643, + 0.61595774, + 0.61745006, + 0.6189413, + 0.6204314, + 0.6219204, + 0.6234082, + 0.62489486, + 0.6263804, + 0.62786466, + 0.62934774, + 0.63082963, + 0.6323103, + 0.63378966, + 0.6352678, + 0.6367447, + 0.63822025, + 0.6396945, + 0.64116746, + 0.6426391, + 0.64410937, + 0.64557827, + 0.64704585, + 0.648512, + 0.6499768, + 0.65144014, + 0.65290207, + 0.6543625, + 0.65582156, + 0.65727913, + 0.6587352, + 0.6601898, + 0.66164285, + 0.6630944, + 0.66454446, + 0.6659929, + 0.6674398, + 0.6688851, + 0.67032886, + 0.671771, + 0.6732115, + 0.6746504, + 0.6760876, + 0.6775232, + 0.6789571, + 0.6803893, + 0.68181986, + 0.68324864, + 0.6846757, + 0.686101, + 0.6875246, + 0.6889464, + 0.6903665, + 0.69178474, + 0.6932012, + 0.6946158, + 0.69602853, + 0.6974395, + 0.69884855, + 0.70025575, + 0.7016611, + 0.7030645, + 0.704466, + 0.70586556, + 0.70726323, + 0.7086589, + 0.7100526, + 0.7114444, + 0.7128341, + 0.71422184, + 0.7156076, + 0.71699125, + 0.7183729, + 0.7197525, + 0.72113, + 0.72250545, + 0.7238788, + 0.72525, + 0.7266191, + 0.7279861, + 0.7293509, + 0.7307136, + 0.7320741, + 0.73343235, + 0.7347885, + 0.7361424, + 0.73749405, + 0.73884344, + 0.7401906, + 0.74153554, + 0.7428782, + 0.7442185, + 0.7455566, + 0.74689233, + 0.74822575, + 0.74955684, + 0.75088555, + 0.7522119, + 0.75353587, + 0.7548575, + 0.75617665, + 0.75749344, + 0.75880784, + 0.76011974, + 0.7614292, + 0.7627362, + 0.7640407, + 0.7653428, + 0.7666423, + 0.7679393, + 0.7692338, + 0.77052575, + 0.7718152, + 0.77310205, + 0.77438635, + 0.775668, + 0.77694714, + 0.77822363, + 0.7794975, + 0.7807687, + 0.7820373, + 0.78330326, + 0.7845665, + 0.7858271, + 0.787085, + 0.78834015, + 0.7895926, + 0.79084235, + 0.79208934, + 0.7933336, + 0.7945751, + 0.7958138, + 0.7970497, + 0.79828286, + 0.79951316, + 0.80074066, + 0.8019653, + 0.80318713, + 0.8044061, + 0.80562216, + 0.80683535, + 0.8080457, + 0.8092531, + 0.8104576, + 0.81165916, + 0.8128578, + 0.81405354, + 0.8152462, + 0.816436, + 0.8176228, + 0.8188066, + 0.81998736, + 0.82116514, + 0.8223399, + 0.8235116, + 0.82468027, + 0.82584584, + 0.82700837, + 0.82816786, + 0.8293242, + 0.8304775, + 0.8316276, + 0.83277464, + 0.8339185, + 0.8350592, + 0.83619684, + 0.83733124, + 0.8384625, + 0.8395905, + 0.84071535, + 0.841837, + 0.8429554, + 0.8440706, + 0.84518254, + 0.84629124, + 0.8473967, + 0.8484988, + 0.8495977, + 0.8506932, + 0.85178554, + 0.85287446, + 0.8539601, + 0.8550424, + 0.85612136, + 0.857197, + 0.8582692, + 0.85933805, + 0.86040354, + 0.86146563, + 0.8625243, + 0.8635795, + 0.86463135, + 0.86567974, + 0.8667247, + 0.8677662, + 0.8688042, + 0.8698388, + 0.8708699, + 0.87189746, + 0.8729215, + 0.8739421, + 0.8749591, + 0.8759726, + 0.87698257, + 0.877989, + 0.87899184, + 0.8799911, + 0.8809868, + 0.8819789, + 0.8829674, + 0.8839523, + 0.8849336, + 0.8859112, + 0.8868853, + 0.88785565, + 0.8888224, + 0.8897854, + 0.8907448, + 0.8917005, + 0.8926525, + 0.8936008, + 0.89454544, + 0.89548635, + 0.8964235, + 0.8973569, + 0.8982866, + 0.89921254, + 0.9001347, + 0.90105313, + 0.9019677, + 0.9028786, + 0.9037856, + 0.90468884, + 0.90558827, + 0.9064839, + 0.90737563, + 0.90826356, + 0.9091477, + 0.91002786, + 0.9109042, + 0.9117767, + 0.91264534, + 0.9135101, + 0.91437095, + 0.91522783, + 0.9160809, + 0.91692996, + 0.91777515, + 0.91861635, + 0.9194537, + 0.920287, + 0.92111635, + 0.92194176, + 0.9227632, + 0.92358065, + 0.92439413, + 0.92520356, + 0.92600906, + 0.9268105, + 0.9276079, + 0.9284013, + 0.92919064, + 0.929976, + 0.9307572, + 0.9315344, + 0.93230754, + 0.9330766, + 0.93384165, + 0.9346025, + 0.9353593, + 0.936112, + 0.9368606, + 0.9376051, + 0.93834543, + 0.93908167, + 0.93981373, + 0.9405417, + 0.94126546, + 0.94198513, + 0.94270056, + 0.9434119, + 0.944119, + 0.94482195, + 0.9455207, + 0.9462152, + 0.94690555, + 0.9475917, + 0.9482736, + 0.9489513, + 0.9496248, + 0.950294, + 0.95095897, + 0.95161974, + 0.95227623, + 0.9529284, + 0.9535764, + 0.95422006, + 0.95485944, + 0.9554946, + 0.9561254, + 0.95675194, + 0.95737416, + 0.9579921, + 0.95860565, + 0.9592149, + 0.95981985, + 0.9604205, + 0.9610168, + 0.9616087, + 0.9621963, + 0.9627795, + 0.9633584, + 0.96393293, + 0.96450305, + 0.9650688, + 0.9656302, + 0.9661872, + 0.9667398, + 0.96728796, + 0.9678318, + 0.96837115, + 0.96890616, + 0.9694367, + 0.96996284, + 0.97048455, + 0.97100186, + 0.9715147, + 0.97202307, + 0.972527, + 0.9730265, + 0.9735216, + 0.97401214, + 0.9744983, + 0.9749799, + 0.9754571, + 0.97592974, + 0.976398, + 0.97686166, + 0.9773209, + 0.97777563, + 0.9782258, + 0.97867155, + 0.9791128, + 0.97954947, + 0.97998166, + 0.9804093, + 0.98083246, + 0.98125106, + 0.98166513, + 0.9820746, + 0.98247963, + 0.98288006, + 0.98327595, + 0.9836673, + 0.9840541, + 0.9844363, + 0.9848139, + 0.98518705, + 0.9855555, + 0.9859195, + 0.98627883, + 0.98663366, + 0.98698384, + 0.9873294, + 0.9876705, + 0.9880069, + 0.9883387, + 0.98866594, + 0.9889885, + 0.98930657, + 0.98962, + 0.9899287, + 0.99023294, + 0.99053246, + 0.99082744, + 0.9911177, + 0.9914034, + 0.99168444, + 0.9919609, + 0.9922327, + 0.9924998, + 0.9927623, + 0.9930202, + 0.9932734, + 0.993522, + 0.9937659, + 0.99400514, + 0.9942398, + 0.99446976, + 0.99469507, + 0.99491566, + 0.9951317, + 0.99534297, + 0.9955496, + 0.9957516, + 0.9959489, + 0.99614155, + 0.9963295, + 0.9965128, + 0.9966914, + 0.99686533, + 0.99703455, + 0.9971991, + 0.997359, + 0.9975142, + 0.9976647, + 0.9978105, + 0.9979516, + 0.99808806, + 0.9982198, + 0.9983468, + 0.9984692, + 0.99858683, + 0.9986998, + 0.998808, + 0.9989116, + 0.99901044, + 0.9991046, + 0.9991941, + 0.99927884, + 0.9993589, + 0.99943423, + 0.99950486, + 0.9995708, + 0.999632, + 0.9996885, + 0.99974036, + 0.99978745, + 0.9998298, + 0.9998675, + 0.99990046, + 0.9999288, + 0.9999523, + 0.99997115, + 0.9999853, + 0.9999947, + 0.9999994, + 0.9999994, + 0.9999947, + 0.9999853, + 0.99997115, + 0.9999523, + 0.9999288, + 0.99990046, + 0.9998675, + 0.9998298, + 0.99978745, + 0.99974036, + 0.9996885, + 0.999632, + 0.9995708, + 0.99950486, + 0.99943423, + 0.9993589, + 0.99927884, + 0.9991941, + 0.9991046, + 0.99901044, + 0.9989116, + 0.998808, + 0.9986998, + 0.99858683, + 0.9984692, + 0.9983468, + 0.9982198, + 0.99808806, + 0.9979516, + 0.9978105, + 0.9976647, + 0.9975142, + 0.997359, + 0.9971991, + 0.99703455, + 0.99686533, + 0.9966914, + 0.9965128, + 0.9963295, + 0.99614155, + 0.9959489, + 0.9957516, + 0.9955496, + 0.99534297, + 0.9951317, + 0.99491566, + 0.99469507, + 0.99446976, + 0.9942398, + 0.99400514, + 0.9937659, + 0.993522, + 0.9932734, + 0.9930202, + 0.9927623, + 0.9924998, + 0.9922327, + 0.9919609, + 0.99168444, + 0.9914034, + 0.9911177, + 0.99082744, + 0.99053246, + 0.99023294, + 0.9899287, + 0.98962, + 0.98930657, + 0.9889885, + 0.98866594, + 0.9883387, + 0.9880069, + 0.9876705, + 0.9873294, + 0.98698384, + 0.98663366, + 0.98627883, + 0.9859195, + 0.9855555, + 0.98518705, + 0.9848139, + 0.9844363, + 0.9840541, + 0.9836673, + 0.98327595, + 0.98288006, + 0.98247963, + 0.9820746, + 0.98166513, + 0.98125106, + 0.98083246, + 0.9804093, + 0.97998166, + 0.97954947, + 0.9791128, + 0.97867155, + 0.9782258, + 0.97777563, + 0.9773209, + 0.97686166, + 0.976398, + 0.97592974, + 0.9754571, + 0.9749799, + 0.9744983, + 0.97401214, + 0.9735216, + 0.9730265, + 0.972527, + 0.97202307, + 0.9715147, + 0.97100186, + 0.97048455, + 0.96996284, + 0.9694367, + 0.96890616, + 0.96837115, + 0.9678318, + 0.96728796, + 0.9667398, + 0.9661872, + 0.9656302, + 0.9650688, + 0.96450305, + 0.96393293, + 0.9633584, + 0.9627795, + 0.9621963, + 0.9616087, + 0.9610168, + 0.9604205, + 0.95981985, + 0.9592149, + 0.95860565, + 0.9579921, + 0.95737416, + 0.95675194, + 0.9561254, + 0.9554946, + 0.95485944, + 0.95422006, + 0.9535764, + 0.9529284, + 0.95227623, + 0.95161974, + 0.95095897, + 0.950294, + 0.9496248, + 0.9489513, + 0.9482736, + 0.9475917, + 0.94690555, + 0.9462152, + 0.9455207, + 0.94482195, + 0.944119, + 0.9434119, + 0.94270056, + 0.94198513, + 0.94126546, + 0.9405417, + 0.93981373, + 0.93908167, + 0.93834543, + 0.9376051, + 0.9368606, + 0.936112, + 0.9353593, + 0.9346025, + 0.93384165, + 0.9330766, + 0.93230754, + 0.9315344, + 0.9307572, + 0.929976, + 0.92919064, + 0.9284013, + 0.9276079, + 0.9268105, + 0.92600906, + 0.92520356, + 0.92439413, + 0.92358065, + 0.9227632, + 0.92194176, + 0.92111635, + 0.920287, + 0.9194537, + 0.91861635, + 0.91777515, + 0.91692996, + 0.9160809, + 0.91522783, + 0.91437095, + 0.9135101, + 0.91264534, + 0.9117767, + 0.9109042, + 0.91002786, + 0.9091477, + 0.90826356, + 0.90737563, + 0.9064839, + 0.90558827, + 0.90468884, + 0.9037856, + 0.9028786, + 0.9019677, + 0.90105313, + 0.9001347, + 0.89921254, + 0.8982866, + 0.8973569, + 0.8964235, + 0.89548635, + 0.89454544, + 0.8936008, + 0.8926525, + 0.8917005, + 0.8907448, + 0.8897854, + 0.8888224, + 0.88785565, + 0.8868853, + 0.8859112, + 0.8849336, + 0.8839523, + 0.8829674, + 0.8819789, + 0.8809868, + 0.8799911, + 0.87899184, + 0.877989, + 0.87698257, + 0.8759726, + 0.8749591, + 0.8739421, + 0.8729215, + 0.87189746, + 0.8708699, + 0.8698388, + 0.8688042, + 0.8677662, + 0.8667247, + 0.86567974, + 0.86463135, + 0.8635795, + 0.8625243, + 0.86146563, + 0.86040354, + 0.85933805, + 0.8582692, + 0.857197, + 0.85612136, + 0.8550424, + 0.8539601, + 0.85287446, + 0.85178554, + 0.8506932, + 0.8495977, + 0.8484988, + 0.8473967, + 0.84629124, + 0.84518254, + 0.8440706, + 0.8429554, + 0.841837, + 0.84071535, + 0.8395905, + 0.8384625, + 0.83733124, + 0.83619684, + 0.8350592, + 0.8339185, + 0.83277464, + 0.8316276, + 0.8304775, + 0.8293242, + 0.82816786, + 0.82700837, + 0.82584584, + 0.82468027, + 0.8235116, + 0.8223399, + 0.82116514, + 0.81998736, + 0.8188066, + 0.8176228, + 0.816436, + 0.8152462, + 0.81405354, + 0.8128578, + 0.81165916, + 0.8104576, + 0.8092531, + 0.8080457, + 0.80683535, + 0.80562216, + 0.8044061, + 0.80318713, + 0.8019653, + 0.80074066, + 0.79951316, + 0.79828286, + 0.7970497, + 0.7958138, + 0.7945751, + 0.7933336, + 0.79208934, + 0.79084235, + 0.7895926, + 0.78834015, + 0.787085, + 0.7858271, + 0.7845665, + 0.78330326, + 0.7820373, + 0.7807687, + 0.7794975, + 0.77822363, + 0.77694714, + 0.775668, + 0.77438635, + 0.77310205, + 0.7718152, + 0.77052575, + 0.7692338, + 0.7679393, + 0.7666423, + 0.7653428, + 0.7640407, + 0.7627362, + 0.7614292, + 0.76011974, + 0.75880784, + 0.75749344, + 0.75617665, + 0.7548575, + 0.75353587, + 0.7522119, + 0.75088555, + 0.74955684, + 0.74822575, + 0.74689233, + 0.7455566, + 0.7442185, + 0.7428782, + 0.74153554, + 0.7401906, + 0.73884344, + 0.73749405, + 0.7361424, + 0.7347885, + 0.73343235, + 0.7320741, + 0.7307136, + 0.7293509, + 0.7279861, + 0.7266191, + 0.72525, + 0.7238788, + 0.72250545, + 0.72113, + 0.7197525, + 0.7183729, + 0.71699125, + 0.7156076, + 0.71422184, + 0.7128341, + 0.7114444, + 0.7100526, + 0.7086589, + 0.70726323, + 0.70586556, + 0.704466, + 0.7030645, + 0.7016611, + 0.70025575, + 0.69884855, + 0.6974395, + 0.69602853, + 0.6946158, + 0.6932012, + 0.69178474, + 0.6903665, + 0.6889464, + 0.6875246, + 0.686101, + 0.6846757, + 0.68324864, + 0.68181986, + 0.6803893, + 0.6789571, + 0.6775232, + 0.6760876, + 0.6746504, + 0.6732115, + 0.671771, + 0.67032886, + 0.6688851, + 0.6674398, + 0.6659929, + 0.66454446, + 0.6630944, + 0.66164285, + 0.6601898, + 0.6587352, + 0.65727913, + 0.65582156, + 0.6543625, + 0.65290207, + 0.65144014, + 0.6499768, + 0.648512, + 0.64704585, + 0.64557827, + 0.64410937, + 0.6426391, + 0.64116746, + 0.6396945, + 0.63822025, + 0.6367447, + 0.6352678, + 0.63378966, + 0.6323103, + 0.63082963, + 0.62934774, + 0.62786466, + 0.6263804, + 0.62489486, + 0.6234082, + 0.6219204, + 0.6204314, + 0.6189413, + 0.61745006, + 0.61595774, + 0.6144643, + 0.61296976, + 0.6114742, + 0.6099776, + 0.6084799, + 0.6069812, + 0.60548156, + 0.60398084, + 0.6024792, + 0.6009766, + 0.599473, + 0.59796846, + 0.596463, + 0.5949567, + 0.5934494, + 0.5919413, + 0.59043235, + 0.5889225, + 0.5874118, + 0.5859003, + 0.58438796, + 0.5828749, + 0.581361, + 0.5798463, + 0.57833093, + 0.5768148, + 0.5752979, + 0.5737803, + 0.57226205, + 0.5707431, + 0.56922346, + 0.5677032, + 0.56618226, + 0.5646607, + 0.5631386, + 0.5616159, + 0.56009257, + 0.55856866, + 0.5570442, + 0.5555192, + 0.55399376, + 0.55246776, + 0.5509412, + 0.5494143, + 0.5478868, + 0.5463589, + 0.54483056, + 0.5433018, + 0.54177266, + 0.5402431, + 0.53871316, + 0.53718287, + 0.5356522, + 0.5341212, + 0.5325899, + 0.53105825, + 0.52952635, + 0.52799416, + 0.5264617, + 0.52492905, + 0.5233961, + 0.5218629, + 0.5203296, + 0.518796, + 0.5172623, + 0.5157284, + 0.51419437, + 0.51266015, + 0.51112586, + 0.50959146, + 0.508057, + 0.5065224, + 0.5049878, + 0.50345314, + 0.50191844, + 0.5003837, + 0.49884894, + 0.49731424, + 0.49577954, + 0.4942449, + 0.4927103, + 0.49117577, + 0.4896413, + 0.48810697, + 0.4865727, + 0.4850386, + 0.48350465, + 0.48197082, + 0.4804372, + 0.4789037, + 0.47737047, + 0.4758374, + 0.4743046, + 0.472772, + 0.4712397, + 0.46970764, + 0.4681759, + 0.4666444, + 0.46511325, + 0.46358243, + 0.46205196, + 0.46052185, + 0.4589921, + 0.45746273, + 0.45593375, + 0.45440522, + 0.45287707, + 0.4513494, + 0.4498222, + 0.44829544, + 0.4467692, + 0.44524345, + 0.4437182, + 0.4421935, + 0.44066933, + 0.4391457, + 0.4376227, + 0.43610024, + 0.43457842, + 0.4330572, + 0.43153659, + 0.43001664, + 0.42849734, + 0.42697874, + 0.4254608, + 0.42394358, + 0.42242706, + 0.42091128, + 0.41939625, + 0.41788197, + 0.41636848, + 0.41485575, + 0.41334385, + 0.41183275, + 0.4103225, + 0.4088131, + 0.40730453, + 0.40579683, + 0.40429002, + 0.40278414, + 0.40127915, + 0.3997751, + 0.398272, + 0.39676985, + 0.39526868, + 0.3937685, + 0.39226928, + 0.39077112, + 0.38927397, + 0.38777786, + 0.38628283, + 0.38478887, + 0.38329598, + 0.3818042, + 0.38031352, + 0.37882397, + 0.37733555, + 0.37584832, + 0.37436223, + 0.37287733, + 0.37139365, + 0.36991116, + 0.3684299, + 0.3669499, + 0.3654711, + 0.36399361, + 0.3625174, + 0.36104247, + 0.35956886, + 0.35809657, + 0.35662562, + 0.355156, + 0.35368776, + 0.35222092, + 0.35075545, + 0.34929138, + 0.34782875, + 0.34636754, + 0.34490776, + 0.34344947, + 0.34199265, + 0.3405373, + 0.3390835, + 0.33763117, + 0.3361804, + 0.33473113, + 0.33328345, + 0.33183733, + 0.3303928, + 0.32894987, + 0.32750854, + 0.32606885, + 0.3246308, + 0.32319438, + 0.32175964, + 0.3203266, + 0.31889522, + 0.31746554, + 0.31603763, + 0.3146114, + 0.31318694, + 0.31176424, + 0.31034333, + 0.30892417, + 0.30750683, + 0.3060913, + 0.3046776, + 0.30326575, + 0.30185574, + 0.30044758, + 0.29904133, + 0.29763696, + 0.29623452, + 0.29483396, + 0.29343536, + 0.2920387, + 0.290644, + 0.28925127, + 0.2878605, + 0.28647178, + 0.28508505, + 0.28370035, + 0.28231767, + 0.28093705, + 0.27955848, + 0.278182, + 0.27680764, + 0.27543533, + 0.27406517, + 0.27269712, + 0.27133122, + 0.26996747, + 0.2686059, + 0.2672465, + 0.2658893, + 0.2645343, + 0.2631815, + 0.26183096, + 0.26048267, + 0.25913662, + 0.25779283, + 0.25645134, + 0.25511214, + 0.25377524, + 0.25244066, + 0.2511084, + 0.24977851, + 0.24845096, + 0.2471258, + 0.24580301, + 0.24448262, + 0.24316463, + 0.24184906, + 0.24053593, + 0.23922524, + 0.237917, + 0.23661123, + 0.23530796, + 0.23400716, + 0.23270889, + 0.23141313, + 0.23011988, + 0.22882919, + 0.22754106, + 0.22625549, + 0.2249725, + 0.2236921, + 0.2224143, + 0.22113912, + 0.21986657, + 0.21859665, + 0.2173294, + 0.2160648, + 0.21480286, + 0.21354362, + 0.2122871, + 0.21103327, + 0.20978215, + 0.2085338, + 0.20728816, + 0.2060453, + 0.2048052, + 0.20356788, + 0.20233336, + 0.20110165, + 0.19987273, + 0.19864666, + 0.19742343, + 0.19620304, + 0.19498552, + 0.19377087, + 0.19255911, + 0.19135024, + 0.19014427, + 0.18894124, + 0.18774113, + 0.18654396, + 0.18534975, + 0.18415849, + 0.18297023, + 0.18178493, + 0.18060264, + 0.17942336, + 0.17824711, + 0.17707388, + 0.1759037, + 0.17473656, + 0.1735725, + 0.1724115, + 0.17125359, + 0.17009878, + 0.16894709, + 0.1677985, + 0.16665305, + 0.16551074, + 0.16437158, + 0.16323557, + 0.16210276, + 0.16097312, + 0.15984666, + 0.15872343, + 0.1576034, + 0.1564866, + 0.15537304, + 0.15426272, + 0.15315565, + 0.15205187, + 0.15095136, + 0.14985412, + 0.1487602, + 0.14766958, + 0.14658229, + 0.14549832, + 0.14441769, + 0.14334041, + 0.1422665, + 0.14119595, + 0.14012878, + 0.13906501, + 0.13800463, + 0.13694766, + 0.13589412, + 0.134844, + 0.13379733, + 0.13275412, + 0.13171434, + 0.13067806, + 0.12964524, + 0.12861592, + 0.12759009, + 0.12656778, + 0.12554897, + 0.124533705, + 0.123521976, + 0.122513786, + 0.12150916, + 0.1205081, + 0.119510606, + 0.118516706, + 0.1175264, + 0.11653969, + 0.1155566, + 0.11457712, + 0.11360128, + 0.112629086, + 0.11166054, + 0.110695645, + 0.10973442, + 0.108776875, + 0.107823014, + 0.10687286, + 0.105926394, + 0.10498364, + 0.104044616, + 0.10310932, + 0.10217776, + 0.101249956, + 0.100325905, + 0.09940562, + 0.098489106, + 0.09757638, + 0.09666744, + 0.095762305, + 0.09486097, + 0.09396346, + 0.09306978, + 0.092179924, + 0.09129391, + 0.09041175, + 0.08953345, + 0.08865902, + 0.08778846, + 0.08692179, + 0.086059004, + 0.08520012, + 0.08434515, + 0.08349409, + 0.08264696, + 0.081803754, + 0.08096449, + 0.08012918, + 0.07929782, + 0.078470424, + 0.077647, + 0.076827556, + 0.076012105, + 0.07520064, + 0.07439318, + 0.07358973, + 0.072790295, + 0.07199489, + 0.071203515, + 0.07041618, + 0.069632895, + 0.06885366, + 0.06807849, + 0.06730739, + 0.06654036, + 0.06577742, + 0.06501857, + 0.06426382, + 0.063513175, + 0.06276664, + 0.062024225, + 0.06128594, + 0.06055178, + 0.05982177, + 0.0590959, + 0.05837419, + 0.057656635, + 0.056943253, + 0.05623404, + 0.05552901, + 0.05482817, + 0.054131523, + 0.053439073, + 0.052750833, + 0.05206681, + 0.051387005, + 0.050711423, + 0.050040077, + 0.04937297, + 0.04871011, + 0.048051503, + 0.04739715, + 0.046747062, + 0.046101246, + 0.045459706, + 0.04482245, + 0.04418948, + 0.043560807, + 0.042936433, + 0.042316366, + 0.04170061, + 0.04108917, + 0.040482055, + 0.03987927, + 0.03928082, + 0.03868671, + 0.03809695, + 0.03751154, + 0.036930487, + 0.036353793, + 0.035781473, + 0.035213523, + 0.034649953, + 0.03409077, + 0.033535972, + 0.03298557, + 0.03243957, + 0.031897973, + 0.03136079, + 0.030828018, + 0.03029967, + 0.029775744, + 0.029256249, + 0.02874119, + 0.02823057, + 0.027724396, + 0.027222672, + 0.026725402, + 0.026232589, + 0.025744243, + 0.025260363, + 0.024780955, + 0.024306025, + 0.023835579, + 0.023369618, + 0.022908146, + 0.02245117, + 0.021998694, + 0.02155072, + 0.021107255, + 0.020668302, + 0.020233864, + 0.019803947, + 0.019378554, + 0.01895769, + 0.018541357, + 0.01812956, + 0.017722303, + 0.01731959, + 0.016921425, + 0.016527811, + 0.016138753, + 0.015754253, + 0.015374315, + 0.014998944, + 0.014628141, + 0.014261913, + 0.0139002595, + 0.013543187, + 0.013190697, + 0.012842793, + 0.01249948, + 0.012160759, + 0.011826635, + 0.01149711, + 0.011172188, + 0.010851871, + 0.010536163, + 0.010225066, + 0.009918584, + 0.009616719, + 0.009319474, + 0.009026852, + 0.008738856, + 0.008455488, + 0.008176751, + 0.007902649, + 0.0076331827, + 0.007368355, + 0.0071081687, + 0.0068526263, + 0.0066017304, + 0.0063554826, + 0.006113886, + 0.0058769425, + 0.005644655, + 0.0054170243, + 0.0051940535, + 0.0049757445, + 0.0047621, + 0.004553121, + 0.00434881, + 0.0041491683, + 0.003954199, + 0.003763903, + 0.0035782822, + 0.0033973386, + 0.0032210737, + 0.0030494893, + 0.0028825868, + 0.002720368, + 0.0025628346, + 0.0024099876, + 0.0022618289, + 0.0021183596, + 0.001979581, + 0.0018454946, + 0.0017161017, + 0.0015914033, + 0.0014714007, + 0.0013560951, + 0.0012454875, + 0.0011395789, + 0.0010383703, + 0.0009418628, + 0.00085005723, + 0.0007629544, + 0.0006805552, + 0.00060286035, + 0.0005298706, + 0.00046158672, + 0.00039800923, + 0.0003391388, + 0.00028497592, + 0.00023552118, + 0.000190775, + 0.00015073782, + 0.000115409995, + 8.4791885e-5, + 5.888376e-5, + 3.7685873e-5, + 2.119842e-5, + 9.4215575e-6, + 2.3553948e-6, + 0.0, +]; + +pub const HANN_DT_2048: [f32; 2048] = [ + 0.005521486812979431, + 0.03455828541749731, + 0.07259171809924676, + 0.10762547088703214, + 0.1441577147100353, + 0.17978889167419415, + 0.2160181852249457, + 0.25181700344934593, + 0.2879347827623988, + 0.3237999200005759, + 0.3598619527743847, + 0.3957570001377795, + 0.43178465031237023, + 0.46769287282661004, + 0.5036955705822778, + 0.5396078234220323, + 0.5755899809622048, + 0.611500547408443, + 0.6474641702367611, + 0.6833690650998977, + 0.7193148880031603, + 0.7552110771128546, + 0.791139112874592, + 0.8270241196880099, + 0.8629339463755707, + 0.8988056389254596, + 0.9346965603354274, + 0.9705530289855215, + 1.0064241690529094, + 1.0422636529355713, + 1.0781140137972947, + 1.1139348547363892, + 1.149763353770349, + 1.1855639664265742, + 1.2213694606562753, + 1.2571483126214062, + 1.2929296152475, + 1.3286852133846128, + 1.364441105267199, + 1.4001719862053241, + 1.4359012239838047, + 1.4716059472941245, + 1.5073072692900735, + 1.5429844125551218, + 1.5786565431043806, + 1.6143046982689504, + 1.6499463509586316, + 1.6855641216243478, + 1.7211740017584372, + 1.756760001117144, + 1.792336807600904, + 1.8278896568830703, + 1.8634320837147498, + 1.898950410953678, + 1.9344571483873458, + 1.9699395874951584, + 2.0054093229694585, + 2.040854512998249, + 2.0762859318953866, + 2.1116925164602396, + 2.147084302704159, + 2.182450929523618, + 2.2178017661182965, + 2.2531270866493305, + 2.288435656071812, + 2.323718325219339, + 2.358983309795639, + 2.3942219857058564, + 2.4294420678973028, + 2.4646354117510416, + 2.499809274436888, + 2.5349559503179964, + 2.5700822769967218, + 2.605180951790042, + 2.6402584267872324, + 2.675307770087431, + 2.7103350787337495, + 2.745333762766855, + 2.7803095915557177, + 2.8152562911486685, + 2.850179327868993, + 2.88507272040472, + 2.919941654269333, + 2.954780419680363, + 2.9895939414350834, + 3.0243767621786053, + 3.05913356422374, + 3.0938591252789833, + 3.1285579017579126, + 3.163224890629137, + 3.1978643375271907, + 3.2324714442613915, + 3.2670502594773017, + 3.3015961766733697, + 3.336113060121229, + 3.3705964829463535, + 3.4050501366198938, + 3.439469762828114, + 3.4738588908809196, + 3.508213420858193, + 3.542536729668231, + 3.576824866433839, + 3.611081064681499, + 3.645301513935596, + 3.6794893126641885, + 3.7136407828117224, + 3.7477588954905094, + 3.7818400976893414, + 3.815887240273679, + 3.8498968884505613, + 3.8838717794508217, + 3.917808590351976, + 3.951709950889188, + 3.9855726441085295, + 4.019399197967784, + 4.053186496001557, + 4.086936969690424, + 4.120647597962852, + 4.15432072077127, + 4.187953407675493, + 4.221547911731444, + 4.255101388677601, + 4.288616008995577, + 4.322089010451669, + 4.355522484984988, + 4.388913748509969, + 4.422264818222405, + 4.45557308452046, + 4.488840493408389, + 4.52206450636016, + 4.555247001530219, + 4.588385508253726, + 4.6214818399539155, + 4.654533590827383, + 4.687542512518678, + 4.7205062612334325, + 4.753426529625174, + 4.786301033232935, + 4.819131408329421, + 4.851915427289728, + 4.884654672446569, + 4.917346970654847, + 4.949993852638429, + 4.9825931974812, + 5.015146486504909, + 5.047651648892719, + 5.080110118664515, + 5.112519873107165, + 5.144882300878146, + 5.177195425489106, + 5.209460592109735, + 5.241675868677804, + 5.273842558636962, + 5.305958772658404, + 5.338025774132126, + 5.370041714865105, + 5.402007819764471, + 5.4339222802563985, + 5.465786284284735, + 5.497598061429581, + 5.529358764110461, + 5.561066658687571, + 5.592722863423854, + 5.624325680158515, + 5.655876194267122, + 5.687372741839753, + 5.718816376626604, + 5.750205467743656, + 5.781541038505865, + 5.812821489945966, + 5.844047816049124, + 5.8752184486947945, + 5.906334353601697, + 5.937393992484083, + 5.968398303816931, + 5.999345778161616, + 6.030237327733485, + 6.061071471000477, + 6.091849094861411, + 6.122568744803148, + 6.153231283282004, + 6.183835281971055, + 6.214381579730189, + 6.244868773602203, + 6.275297679676509, + 6.305666919577647, + 6.335977287417108, + 6.366227428657096, + 6.3964181161612865, + 6.426548018538905, + 6.456617888121619, + 6.486626415976779, + 6.51657433459248, + 6.54646035683674, + 6.576285196034175, + 6.606047586220247, + 6.635748222168276, + 6.665385858499097, + 6.694961172056978, + 6.7244729374499395, + 6.753921814181209, + 6.783306596301997, + 6.81262792653368, + 6.841884617845237, + 6.871077296699691, + 6.90020479448938, + 6.9292677219437735, + 6.958264928373933, + 6.987197009286449, + 7.0160628314294895, + 7.044862975580645, + 7.073596325483383, + 7.102263447617015, + 7.13086324231082, + 7.159396262186115, + 7.187861423735345, + 7.216259266169714, + 7.2445887217149165, + 7.272850316609489, + 7.301042998421441, + 7.329167280795007, + 7.357222126298745, + 7.385208036358111, + 7.413123988174388, + 7.440970471334214, + 7.468746477312518, + 7.496452484234734, + 7.5240874975250644, + 7.551651984160945, + 7.579144963206598, + 7.606566890846695, + 7.6339167994600245, + 7.661195134754991, + 7.688400942134336, + 7.715534657150402, + 7.742595337937107, + 7.769583410182351, + 7.796497944479874, + 7.823339356954589, + 7.850106730384315, + 7.876800471611526, + 7.903419675330334, + 7.929964739395312, + 7.956434770165152, + 7.982830156751986, + 8.009150016944389, + 8.03539473137868, + 8.061563429030628, + 8.087656482314172, + 8.113673031165515, + 8.139613440009267, + 8.16547685953367, + 8.191263646396974, + 8.216972961842666, + 8.242605154983089, + 8.268159397402089, + 8.293636030897593, + 8.319034237181375, + 8.344354350972466, + 8.369595563915471, + 8.394758203828742, + 8.419841472125693, + 8.444845689934324, + 8.469770068239189, + 8.494614921681922, + 8.519379470637556, + 8.544064023449561, + 8.568667809731705, + 8.593191131693132, + 8.617633228021631, + 8.641994394994446, + 8.6662738801988, + 8.690471974143184, + 8.714587933167586, + 8.73862204219707, + 8.76257356616611, + 8.786442784565974, + 8.810228970791188, + 8.833932399060776, + 8.85755235109447, + 8.88108909598218, + 8.904541923630882, + 8.927911098167844, + 8.951195917547185, + 8.97439664107291, + 8.997512574629335, + 9.020543972834142, + 9.043490149375193, + 9.066351354334332, + 9.089126909061534, + 9.111817059254715, + 9.134421133823185, + 9.15693937417532, + 9.179371116679278, + 9.201716598602863, + 9.22397516364013, + 9.246147045050858, + 9.26823159374717, + 9.290229039101833, + 9.312138739146398, + 9.333960919471131, + 9.355694945138293, + 9.377341038072045, + 9.398898570256987, + 9.420367760071402, + 9.441747986318386, + 9.463039463948968, + 9.484241578493423, + 9.505354541571522, + 9.526377745358918, + 9.547311398244466, + 9.568154898958603, + 9.588908452772007, + 9.609571464869896, + 9.630144137514213, + 9.65062588226694, + 9.671016898452354, + 9.69131660395342, + 9.711525195253119, + 9.731642096456957, + 9.751667501307821, + 9.77160084005213, + 9.791442303801666, + 9.811191328857518, + 9.830848103772743, + 9.850412070848211, + 9.869883416169971, + 9.889261587948486, + 9.908546769891771, + 9.927738416062583, + 9.946836707862408, + 9.96584110514977, + 9.984751787085711, + 10.003568219256282, + 10.022290578678996, + 10.040918336591853, + 10.0594516679534, + 10.0778900495732, + 10.096233654433435, + 10.114481964879412, + 10.13263515195753, + 10.150692703492046, + 10.168654788688169, + 10.186520900770551, + 10.204291207175597, + 10.221965206481684, + 10.239543064422296, + 10.257024284870273, + 10.274409031913876, + 10.291696814684139, + 10.308887795688587, + 10.325981489250523, + 10.34297805637241, + 10.359877016507117, + 10.376678529222431, + 10.393382119063979, + 10.409987944205662, + 10.42649553423553, + 10.442905046007928, + 10.45921601410544, + 10.475428594114486, + 10.491542325558441, + 10.507557362831141, + 10.523473250342576, + 10.539290141343702, + 10.555007585101684, + 10.570625733765352, + 10.58614414142333, + 10.60156295917911, + 10.616881745885454, + 10.632100651671054, + 10.647219240112586, + 10.662237660394865, + 10.67715548079207, + 10.691972849599377, + 10.7066893397401, + 10.721305098677565, + 10.735819703939374, + 10.750233302207297, + 10.764545475577714, + 10.778756369989622, + 10.792865572085201, + 10.806873227107083, + 10.820778926188984, + 10.834582813934238, + 10.848284485931632, + 10.86188408620113, + 10.875381214744316, + 10.888776015026414, + 10.902068091443986, + 10.915257586954242, + 10.928344110309425, + 10.941327803998627, + 10.954208281091855, + 10.966985683662617, + 10.979659629075758, + 10.992230259003609, + 11.004697195085495, + 11.017060578647216, + 11.029320035557548, + 11.041475706835294, + 11.053527222541517, + 11.065474723449155, + 11.077317843772242, + 11.089056724057192, + 11.100691002659596, + 11.112220819944046, + 11.123645818367368, + 11.13496613813891, + 11.146181425808441, + 11.157291821457642, + 11.168296975705422, + 11.17919702853393, + 11.189991634599814, + 11.20068093383739, + 11.211264584909053, + 11.221742727726822, + 11.232115024927172, + 11.242381616454942, + 11.252542168892381, + 11.262596822224328, + 11.272545246970523, + 11.28238758320192, + 11.292123505329132, + 11.301753153543823, + 11.311276206131605, + 11.320692803437375, + 11.330002627595071, + 11.339205819111568, + 11.348302063980563, + 11.357291502892984, + 11.366173825655856, + 11.37494917319534, + 11.38361723909775, + 11.39217816456353, + 11.400631646938093, + 11.408977827704916, + 11.417216407963714, + 11.425347529500696, + 11.433370897153472, + 11.441286653046635, + 11.449094505709933, + 11.456794597648745, + 11.464386641069813, + 11.471870778871992, + 11.479246726930525, + 11.486514628555698, + 11.493674203272159, + 11.500725594830415, + 11.507668526368963, + 11.514503142127012, + 11.521229168842591, + 11.527846751230834, + 11.534355619632167, + 11.540755919272176, + 11.54704738405275, + 11.553230159751015, + 11.559303983805924, + 11.565269002555924, + 11.571124956983805, + 11.57687199399254, + 11.582509858094623, + 11.588038696790173, + 11.593458258085978, + 11.598768690118035, + 11.60396974435297, + 11.609061569595102, + 11.61404392076557, + 11.61891694732757, + 11.623680407657424, + 11.6283344519028, + 11.632878841869939, + 11.637313728411439, + 11.641638876742743, + 11.645854438456103, + 11.649960182152656, + 11.653956260168306, + 11.657842444497321, + 11.661618888224407, + 11.66528536672103, + 11.668842033849366, + 11.67228866832846, + 11.675625424825947, + 11.678852085396242, + 11.68196880551821, + 11.684975370566665, + 11.687871936864928, + 11.69065829308647, + 11.693334596399628, + 11.695900638774644, + 11.698356578257961, + 11.70070221008014, + 11.702937693174777, + 11.705062826042015, + 11.70707776851019, + 11.708982322327188, + 11.710776648241348, + 11.71246055122423, + 11.714034192962407, + 11.715497381653694, + 11.71685027991925, + 11.718092699167173, + 11.719224802978868, + 11.720246405956049, + 11.721157672654476, + 11.72195842085576, + 11.722648816108329, + 11.723228679350225, + 11.723698177134615, + 11.724057133565575, + 11.724305716195733, + 11.724443752280703, + 11.724471410398825, + 11.724388520918676, + 11.724195253487759, + 11.723891441574843, + 11.7234772558769, + 11.722952532974912, + 11.722317444622467, + 11.721571830500544, + 11.720715863437901, + 11.719749386187319, + 11.71867257267689, + 11.71748526872014, + 11.716187649340814, + 11.714779563416997, + 11.71326118708528, + 11.711632372254408, + 11.709893296190955, + 11.708043813828946, + 11.706084103581645, + 11.704014023390307, + 11.701833752813533, + 11.699543152796561, + 11.697142404062543, + 11.694631370546974, + 11.692010234132386, + 11.689278861740295, + 11.686437436431854, + 11.683485828096968, + 11.680424220979704, + 11.677252487934833, + 11.67397081439098, + 11.670579076161964, + 11.66707745987462, + 11.663465844271634, + 11.659744417208621, + 11.65591306034299, + 11.651971962752162, + 11.647921009004342, + 11.643760389415588, + 11.639489991454896, + 11.635110006665714, + 11.63062032541524, + 11.62602114050302, + 11.62131234516213, + 11.616494133447123, + 11.611566401471297, + 11.606529344541942, + 11.60138286163216, + 11.596127149321852, + 11.590762109420934, + 11.585287939799695, + 11.579704545102222, + 11.574012124471306, + 11.568210585386268, + 11.562300128275613, + 11.556280663439743, + 11.550152392597429, + 11.543915228852578, + 11.537569375237325, + 11.531114747638224, + 11.524551550398854, + 11.517879702194252, + 11.511099408678332, + 11.504210591302744, + 11.497213457038686, + 11.490107930092185, + 11.482894218781396, + 11.475572250050442, + 11.468142233548955, + 11.460604098966668, + 11.452958057287718, + 11.445204040933238, + 11.437342262233749, + 11.429372656323093, + 11.421295436884169, + 11.41311054176055, + 11.40481818598301, + 11.396418310102478, + 11.38791113050166, + 11.37929659041471, + 11.37057490759887, + 11.361746027951112, + 11.352810170608043, + 11.343767284133236, + 11.334617589021866, + 11.325361036498968, + 11.315997848446342, + 11.306527978723313, + 11.296951650587907, + 11.287268820544607, + 11.277479713229665, + 11.267584287772403, + 11.257582770191732, + 11.247475122241744, + 11.237261571319653, + 11.226942081787616, + 11.21651688243905, + 11.20598594022574, + 11.19534948533932, + 11.184607487316626, + 11.17376017774143, + 11.162807528728147, + 11.151749773262225, + 11.140586886024034, + 11.12931910139589, + 11.117946396608778, + 11.10646900746513, + 11.09488691372605, + 11.083200352603257, + 11.071409306396939, + 11.05951401372155, + 11.047514459404088, + 11.035410883466898, + 11.023203273251127, + 11.0108918701967, + 10.998476664140163, + 10.9859578979376, + 10.97333556392176, + 10.9606099063584, + 10.947780920069343, + 10.934848850728832, + 10.921813695637839, + 10.908675701888345, + 10.895434869238798, + 10.882091446202894, + 10.868645434985261, + 10.855097085531565, + 10.841446402478596, + 10.827693637192013, + 10.813838796738898, + 10.799882133911316, + 10.785823658198462, + 10.771663623807926, + 10.75740204263873, + 10.743039170324849, + 10.728575021165787, + 10.714009852213605, + 10.699343680159252, + 10.684576763479445, + 10.669709121241912, + 10.654741013339782, + 10.639672461225594, + 10.624503726198068, + 10.609234832074181, + 10.593866041584326, + 10.57839738087337, + 10.56282911410687, + 10.547161269771898, + 10.531394113442586, + 10.51552767593593, + 10.49956222424871, + 10.483497791519154, + 10.467334646159552, + 10.451072823602724, + 10.434712593698672, + 10.41825399417069, + 10.401697296274666, + 10.385042540033494, + 10.368289998109288, + 10.35143971280785, + 10.33449195819975, + 10.317446778853835, + 10.300304450264592, + 10.283065019243962, + 10.265728762699567, + 10.248295729689021, + 10.230766198534813, + 10.213140220522142, + 10.19541807537731, + 10.17759981661254, + 10.159685725363222, + 10.141675857352013, + 10.12357049511079, + 10.10536969657255, + 10.08707374566778, + 10.068682702518592, + 10.050196852457736, + 10.03161625778657, + 10.012941205232108, + 9.994171759267443, + 9.975308208016768, + 9.956350618105851, + 9.937299279056695, + 9.918154259637388, + 9.898915850763464, + 9.879584123340065, + 9.86015936966258, + 9.840641662773615, + 9.821031296346126, + 9.801328345536263, + 9.781533105397152, + 9.761645653197828, + 9.741666285359356, + 9.721595081243112, + 9.701432338654705, + 9.681178139037119, + 9.660832781557769, + 9.640396349733216, + 9.619869144105923, + 9.599251250248615, + 9.57854297006992, + 9.55774439118615, + 9.536855816873778, + 9.51587733678096, + 9.494809255545961, + 9.473651664847662, + 9.452404870669088, + 9.431068966710058, + 9.409644260302416, + 9.388130847146961, + 9.366529035931345, + 9.344838924343755, + 9.32306082240256, + 9.301194829798328, + 9.279241257876796, + 9.257200208297778, + 9.235071993741855, + 9.212856717832244, + 9.190554694576143, + 9.168166029539467, + 9.145691038063283, + 9.123129827649691, + 9.1004827149488, + 9.07774980939611, + 9.054931428961822, + 9.032027684989554, + 9.009038896758852, + 8.985965177521926, + 8.9628068478593, + 8.939564022914517, + 8.91623702456893, + 8.892825969853249, + 8.869331181935207, + 8.845752779717497, + 8.822091087656311, + 8.798346226519831, + 8.774518522039537, + 8.75060809683015, + 8.726615277910842, + 8.702540189725502, + 8.678383160568334, + 8.65414431669694, + 8.62982398768884, + 8.605422301610005, + 8.58093958929385, + 8.556375980605889, + 8.531731807644023, + 8.507007202065477, + 8.482202497201321, + 8.45731782649923, + 8.432353524539161, + 8.407309726524172, + 8.382186768269122, + 8.356984786748715, + 8.331704118996612, + 8.306344903735019, + 8.28090747921837, + 8.255391985901628, + 8.229798763268514, + 8.204127953480532, + 8.178379897243977, + 8.152554738417317, + 8.126652818919796, + 8.100674284309957, + 8.074619477703196, + 8.04848854634081, + 8.022281834529695, + 7.995999491189677, + 7.9696418618114695, + 7.9432090969733675, + 7.916701543347528, + 7.890119353160044, + 7.863462874262234, + 7.836732260505526, + 7.809927860912866, + 7.783049830965128, + 7.756098520842959, + 7.72907408762987, + 7.701976882665398, + 7.674807064639379, + 7.647564986033541, + 7.620250807114308, + 7.592864881512585, + 7.56540737107597, + 7.537878630554707, + 7.510278823362934, + 7.48260830537726, + 7.45486724156483, + 7.427055988917599, + 7.3991747139325454, + 7.371223774724696, + 7.343203339313553, + 7.315113766909195, + 7.28695522704728, + 7.2587280800448095, + 7.230432496925822, + 7.202068839093067, + 7.17363727906628, + 7.145138179332497, + 7.116571713875285, + 7.087938246255745, + 7.059237951935061, + 7.030471195524027, + 7.001638153934163, + 6.972739192846115, + 6.943774490597045, + 6.914744413925487, + 6.885649142587587, + 6.856489044365273, + 6.827264300430682, + 6.797975279590047, + 6.768622164431438, + 6.7392053247684975, + 6.709724944582576, + 6.680181394713227, + 6.650574860505541, + 6.620905713817531, + 6.591174141346746, + 6.5613805159517185, + 6.531525025691767, + 6.501608044404016, + 6.471629761485753, + 6.441590551767565, + 6.411490605961939, + 6.38133029988079, + 6.351109825536425, + 6.320829559717051, + 6.290489695733253, + 6.2600906113298365, + 6.229632501096449, + 6.199115743735274, + 6.168540535106109, + 6.13790725484577, + 6.107216100083874, + 6.076467451385979, + 6.045661507116927, + 6.0147986487814915, + 5.983879075969401, + 5.952903171100718, + 5.921871134988323, + 5.890783350951148, + 5.85964002101492, + 5.828441529392183, + 5.797188079306637, + 5.765880055856156, + 5.734517663440831, + 5.703101288046111, + 5.671631135233451, + 5.64010759185606, + 5.608530864637292, + 5.576901341284087, + 5.545219229661965, + 5.513484918334009, + 5.4816986162850245, + 5.449860712930012, + 5.417971418363066, + 5.386031122831063, + 5.354040037529245, + 5.321998553529612, + 5.289906883119798, + 5.25776541817649, + 5.2255743720667605, + 5.1933341374727835, + 5.161044928823923, + 5.128707139594648, + 5.096320985257666, + 5.063886860085793, + 5.031404980576503, + 4.998875741780606, + 4.966299361214242, + 4.933676234700693, + 4.901006580759969, + 4.868290795971146, + 4.835529099848206, + 4.802721889718448, + 4.769869386084915, + 4.7369719869952425, + 4.70402991392537, + 4.671043565664669, + 4.638013164622605, + 4.6049391103157005, + 4.571821626096937, + 4.5386611121785805, + 4.50545779285311, + 4.472212069022338, + 4.438924165893278, + 4.4055944850643645, + 4.372223252622875, + 4.338810870862364, + 4.305357566747602, + 4.2718637432418, + 4.238329628183272, + 4.204755625188175, + 4.171141962957132, + 4.137489045755604, + 4.103797103120801, + 4.070066539961222, + 4.036297586650259, + 4.002490648711971, + 3.9686459573410953, + 3.9347639186869565, + 3.9008447647347584, + 3.866888902248331, + 3.8328965639987667, + 3.798868157351637, + 3.7648039158463154, + 3.730704247438656, + 3.696569386434402, + 3.662399741355882, + 3.628195547260795, + 3.593957213237971, + 3.5596849750800255, + 3.5253792424286448, + 3.4910402517947374, + 3.4566684133726, + 3.422263964368055, + 3.3878273155197127, + 3.353358704719972, + 3.3188585432323325, + 3.284327069627059, + 3.2497646956874022, + 3.215171660633753, + 3.180548376760262, + 3.145895083947232, + 3.1112121949644314, + 3.0764999503346058, + 3.041758763316389, + 3.0069888750437515, + 2.97219069924913, + 2.9373644776832184, + 2.9025106245256422, + 2.8676293821288117, + 2.832721165126306, + 2.7977862164385283, + 2.7628249511478473, + 2.727837612736717, + 2.6928246167188665, + 2.657786207120502, + 2.6227227998832183, + 2.5876346395691514, + 2.552522142519567, + 2.5173855538246146, + 2.4822252902198807, + 2.4470415973114705, + 2.411834892216, + 2.376605421026956, + 2.341353601250336, + 2.306079679448695, + 2.270784073493796, + 2.2354670304241595, + 2.200128968454158, + 2.164770135075951, + 2.129390948851964, + 2.093991657705153, + 2.058572680533415, + 2.0231342656846203, + 1.9876768323761644, + 1.9522006293654959, + 1.9167060761766377, + 1.8811934219627942, + 1.8456630865538777, + 1.810115319478533, + 1.7745505408489481, + 1.738969000568384, + 1.7033711190313245, + 1.6677571464768879, + 1.6321275035768517, + 1.5964824409087173, + 1.5608223793959475, + 1.5251475699352224, + 1.489458433703993, + 1.4537552219038574, + 1.418038355939922, + 1.3823080873204294, + 1.346564837661237, + 1.3108088587547193, + 1.275040572432521, + 1.2392602307504936, + 1.2034682557349268, + 1.167664899695622, + 1.131850584854298, + 1.0960255637568257, + 1.0601902587990772, + 1.0243449227470205, + 0.9884899781713905, + 0.9526256780394557, + 0.9167524450817126, + 0.8808705324606513, + 0.8449803630544307, + 0.8090821901960435, + 0.7731764368991585, + 0.7372633566743954, + 0.701343372644627, + 0.6654167384758988, + 0.629483877401937, + 0.5935450432259527, + 0.5576006592905491, + 0.5216509795040613, + 0.48569642730979073, + 0.4497372567241, + 0.41377389126450825, + 0.37780658504263825, + 0.3418357616401976, + 0.3058616752554638, + 0.2698847495166834, + 0.23390523869324542, + 0.19792356645741022, + 0.16193998712275734, + 0.1259549244045739, + 0.08996863264803294, + 0.05398153558744065, + 0.017993887591116364, + -0.01799388759253912, + -0.05398153558829827, + -0.08996863264546807, + -0.12595492440620212, + -0.1619399871217596, + -0.19792356645677212, + -0.23390523869349714, + -0.2698847495180797, + -0.30586167525460395, + -0.3418357616401829, + -0.37780658504397197, + -0.41377389126201797, + -0.44973725672591625, + -0.48569642730787727, + -0.5216509795051895, + -0.5576006592904412, + -0.5935450432265679, + -0.6294838774024873, + -0.665416738474241, + -0.7013433726453029, + -0.7372633566720604, + -0.7731764369016885, + -0.8090821901954801, + -0.8449803630555316, + -0.880870532459304, + -0.9167524450828244, + -0.9526256780382589, + -0.9884899781710271, + -1.0243449227477959, + -1.0601902587978915, + -1.096025563756666, + -1.1318505848558618, + -1.1676648996974444, + -1.2034682557337582, + -1.239260230748657, + -1.2750405724342118, + -1.3108088587534958, + -1.3465648376620745, + -1.3823080873200908, + -1.4180383559396648, + -1.4537552219051655, + -1.489458433702664, + -1.5251475699358097, + -1.5608223793956004, + -1.5964824409094052, + -1.6321275035761493, + -1.6677571464757814, + -1.7033711190316092, + -1.7389690005683376, + -1.7745505408512523, + -1.8101153194764417, + -1.8456630865543737, + -1.8811934219615767, + -1.9167060761771895, + -1.9522006293667549, + -1.9876768323740108, + -2.0231342656863864, + -2.0585726805332163, + -2.093991657705638, + -2.129390948851341, + -2.16477013507539, + -2.200128968453549, + -2.235467030424281, + -2.27078407349417, + -2.3060796794516536, + -2.341353601247473, + -2.3766054210283905, + -2.411834892215806, + -2.447041597310939, + -2.4822252902200845, + -2.5173855538249, + -2.5525221425198517, + -2.587634639568384, + -2.622722799882784, + -2.657786207122321, + -2.692824616718349, + -2.727837612736315, + -2.762824951146031, + -2.797786216438343, + -2.832721165128472, + -2.867629382127737, + -2.9025106245273777, + -2.9373644776815984, + -2.9721906992503397, + -3.0069888750422122, + -3.04175876331483, + -3.076499950337064, + -3.111212194964269, + -3.145895083946943, + -3.1805483767604104, + -3.215171660635196, + -3.249764695684082, + -3.284327069628236, + -3.318858543230755, + -3.3533587047218694, + -3.38782731551807, + -3.4222639643717794, + -3.45666841337188, + -3.491040251794464, + -3.525379242430015, + -3.5596849750772765, + -3.5939572132390656, + -3.6281955472614036, + -3.662399741353529, + -3.69656938643555, + -3.7307042474386622, + -3.7648039158473585, + -3.798868157349177, + -3.8328965640020067, + -3.866888902246969, + -3.900844764734037, + -3.934763918686247, + -3.96864595734193, + -4.002490648713474, + -4.036297586647417, + -4.070066539962728, + -4.103797103120743, + -4.137489045753349, + -4.171141962960419, + -4.2047556251866585, + -4.238329628184769, + -4.271863743239653, + -4.305357566749272, + -4.338810870861968, + -4.3722232526232085, + -4.4055944850617275, + -4.4389241658943535, + -4.472212069024007, + -4.5054577928530835, + -4.538661112179901, + -4.571821626094582, + -4.604939110315818, + -4.638013164622886, + -4.671043565662723, + -4.704029913927512, + -4.736971986996295, + -4.769869386082145, + -4.802721889720561, + -4.835529099850488, + -4.868290795967563, + -4.901006580762122, + -4.933676234696943, + -4.966299361215627, + -4.998875741780523, + -5.031404980577208, + -5.063886860085447, + -5.096320985258529, + -5.128707139595904, + -5.161044928821862, + -5.193334137474736, + -5.225574372066035, + -5.257765418176732, + -5.289906883119693, + -5.321998553527684, + -5.354040037529817, + -5.386031122829979, + -5.417971418364763, + -5.449860712927758, + -5.481698616286345, + -5.513484918334727, + -5.545219229663762, + -5.576901341281515, + -5.608530864638049, + -5.64010759185701, + -5.671631135233513, + -5.703101288043742, + -5.734517663443484, + -5.765880055856111, + -5.79718807930674, + -5.828441529391882, + -5.859640021014692, + -5.890783350950686, + -5.921871134987937, + -5.952903171098724, + -5.983879075972223, + -6.014798648780392, + -6.045661507118466, + -6.076467451383264, + -6.107216100086563, + -6.137907254845004, + -6.168540535106414, + -6.1991157437323325, + -6.229632501100784, + -6.260090611325204, + -6.290489695735855, + -6.320829559716241, + -6.351109825538767, + -6.3813302998762484, + -6.411490605964173, + -6.441590551768847, + -6.471629761484865, + -6.501608044402607, + -6.531525025693695, + -6.561380515950996, + -6.591174141346594, + -6.62090571381767, + -6.650574860505898, + -6.680181394714089, + -6.70972494458405, + -6.739205324767751, + -6.768622164431387, + -6.797975279587534, + -6.827264300433184, + -6.856489044362961, + -6.88564914258985, + -6.914744413921711, + -6.943774490599009, + -6.972739192846882, + -7.001638153936796, + -7.030471195521448, + -7.059237951933332, + -7.08793824625848, + -7.116571713874052, + -7.14513817933026, + -7.173637279068767, + -7.2020688390925605, + -7.2304324969268325, + -7.258728080042108, + -7.286955227052959, + -7.315113766905941, + -7.343203339312892, + -7.371223774722398, + -7.399174713934283, + -7.427055988916094, + -7.454867241567423, + -7.482608305377263, + -7.510278823363376, + -7.537878630553406, + -7.56540737107705, + -7.592864881512477, + -7.620250807116514, + -7.647564986029359, + -7.674807064641146, + -7.701976882666092, + -7.729074087630846, + -7.756098520838657, + -7.783049830967055, + -7.8099278609137395, + -7.836732260506401, + -7.8634628742600166, + -7.890119353161921, + -7.916701543347031, + -7.943209096971965, + -7.969641861810498, + -7.99599949119202, + -8.022281834527275, + -8.048488546343155, + -8.074619477701187, + -8.100674284313998, + -8.1266528189168, + -8.152554738420436, + -8.178379897238973, + -8.204127953482761, + -8.22979876326633, + -8.255391985902325, + -8.280907479221373, + -8.306344903732196, + -8.3317041189986, + -8.356984786749535, + -8.382186768268472, + -8.40730972652376, + -8.432353524535149, + -8.457317826503333, + -8.48220249720078, + -8.50700720206519, + -8.53173180764139, + -8.55637598061258, + -8.580939589287203, + -8.605422301615201, + -8.629823987684505, + -8.654144316700998, + -8.678383160564001, + -8.702540189727557, + -8.726615277909813, + -8.750608096831874, + -8.774518522037711, + -8.798346226520135, + -8.822091087657405, + -8.845752779719012, + -8.869331181933083, + -8.89282596985248, + -8.916237024569094, + -8.939564022916445, + -8.962806847858575, + -8.985965177522996, + -9.009038896754443, + -9.032027684995102, + -9.054931428959268, + -9.077749809398433, + -9.100482714947471, + -9.12312982764973, + -9.14569103805994, + -9.168166029544123, + -9.190554694573123, + -9.212856717833803, + -9.235071993741183, + -9.257200208296936, + -9.279241257877691, + -9.301194829798035, + -9.323060822401375, + -9.344838924346705, + -9.366529035924348, + -9.388130847152304, + -9.409644260304722, + -9.431068966707949, + -9.452404870668788, + -9.473651664848367, + -9.494809255543377, + -9.515877336786241, + -9.536855816869462, + -9.557744391187624, + -9.578542970067645, + -9.599251250250852, + -9.619869144102939, + -9.640396349738042, + -9.660832781555294, + -9.681178139035412, + -9.701432338654168, + -9.721595081242679, + -9.741666285359923, + -9.761645653197832, + -9.781533105395408, + -9.801328345540385, + -9.821031296345804, + -9.84064166277354, + -9.860159369664402, + -9.879584123340189, + -9.898915850761963, + -9.918154259639419, + -9.93729927905077, + -9.956350618111124, + -9.975308208014345, + -9.994171759267589, + -10.012941205232059, + -10.031616257785256, + -10.05019685245715, + -10.068682702522528, + -10.087073745664709, + -10.105369696573245, + -10.123570495109625, + -10.141675857351828, + -10.159685725362687, + -10.17759981661602, + -10.195418075376555, + -10.213140220525256, + -10.230766198531695, + -10.248295729690525, + -10.26572876270112, + -10.283065019242892, + -10.300304450259539, + -10.31744677885664, + -10.334491958196212, + -10.351439712812375, + -10.368289998107715, + -10.385042540033723, + -10.401697296275824, + -10.418253994171232, + -10.434712593693494, + -10.451072823611366, + -10.467334646151748, + -10.48349779152126, + -10.499562224247114, + -10.515527675938063, + -10.531394113444074, + -10.547161269770388, + -10.56282911410694, + -10.578397380877197, + -10.593866041581201, + -10.609234832073756, + -10.62450372620083, + -10.63967246122154, + -10.654741013341063, + -10.669709121242063, + -10.684576763474123, + -10.69934368016624, + -10.714009852209363, + -10.728575021167979, + -10.743039170325234, + -10.757402042640622, + -10.771663623802217, + -10.78582365820364, + -10.799882133905129, + -10.813838796743914, + -10.827693637189919, + -10.841446402479905, + -10.855097085531998, + -10.868645434985854, + -10.882091446200818, + -10.895434869241658, + -10.908675701887244, + -10.921813695636674, + -10.934848850732914, + -10.947780920067348, + -10.960609906355602, + -10.973335563926096, + -10.98595789793334, + -10.99847666414218, + -11.01089187019302, + -11.023203273250916, + -11.03541088347139, + -11.047514459401784, + -11.059514013718656, + -11.071409306402048, + -11.08320035260493, + -11.094886913723897, + -11.106469007467329, + -11.117946396609323, + -11.129319101395234, + -11.140586886021916, + -11.15174977325988, + -11.162807528733115, + -11.173760177737428, + -11.18460748731664, + -11.195349485339866, + -11.205985940225254, + -11.216516882438643, + -11.226942081791467, + -11.23726157131544, + -11.247475122242221, + -11.257582770192446, + -11.2675842877709, + -11.277479713232792, + -11.287268820547029, + -11.296951650584136, + -11.306527978728344, + -11.315997848441713, + -11.32536103650118, + -11.33461758902196, + -11.343767284130804, + -11.352810170606631, + -11.361746027953895, + -11.37057490759546, + -11.379296590417836, + -11.387911130498434, + -11.396418310102627, + -11.404818185985924, + -11.41311054175922, + -11.42129543688069, + -11.42937265632788, + -11.437342262230246, + -11.445204040933719, + -11.452958057290417, + -11.460604098967902, + -11.468142233548619, + -11.475572250050677, + -11.482894218777664, + -11.490107930096876, + -11.497213457035189, + -11.50421059130298, + -11.511099408679891, + -11.517879702193882, + -11.524551550398314, + -11.53111474763898, + -11.537569375232964, + -11.543915228858824, + -11.550152392594173, + -11.556280663441257, + -11.562300128275488, + -11.56821058538516, + -11.574012124469325, + -11.579704545105207, + -11.585287939797041, + -11.59076210942691, + -11.596127149317955, + -11.60138286163254, + -11.60652934454301, + -11.611566401471322, + -11.616494133444963, + -11.62131234516588, + -11.626021140498656, + -11.63062032541781, + -11.635110006667107, + -11.63948999145333, + -11.643760389413472, + -11.647921009006632, + -11.65197196274813, + -11.655913060346686, + -11.659744417204505, + -11.663465844272999, + -11.667077459876905, + -11.67057907616, + -11.673970814390628, + -11.677252487941532, + -11.680424220974901, + -11.683485828100284, + -11.686437436428408, + -11.689278861741272, + -11.692010234132713, + -11.694631370547697, + -11.697142404058216, + -11.699543152804221, + -11.701833752807758, + -11.704014023389606, + -11.706084103582949, + -11.708043813829617, + -11.709893296189207, + -11.711632372254353, + -11.713261187081207, + -11.714779563421086, + -11.716187649341533, + -11.717485268717843, + -11.718672572679047, + -11.719749386190363, + -11.720715863434185, + -11.721571830505564, + -11.722317444619758, + -11.722952532975542, + -11.72347725587312, + -11.723891441576372, + -11.72419525348775, + -11.724388520920238, + -11.724471410395427, + -11.724443752283154, + -11.724305716195557, + -11.724057133563432, + -11.723698177138768, + -11.723228679348566, + -11.72264881610455, + -11.721958420858254, + -11.721157672653215, + -11.7202464059594, + -11.719224802977589, + -11.718092699170006, + -11.716850279917121, + -11.715497381655112, + -11.714034192958946, + -11.71246055122973, + -11.710776648235756, + -11.70898232232987, + -11.707077768508059, + -11.705062826041525, + -11.702937693177132, + -11.700702210079927, + -11.698356578254316, + -11.695900638780357, + -11.693334596398415, + -11.69065829308364, + -11.68787193686641, + -11.684975370566784, + -11.681968805517243, + -11.678852085395064, + -11.675625424824611, + -11.672288668335593, + -11.668842033845188, + -11.665285366721115, + -11.66161888822584, + -11.657842444498234, + -11.65395626016475, + -11.649960182159, + -11.64585443845051, + -11.64163887674705, + -11.637313728407834, + -11.63287884186964, + -11.628334451903529, + -11.623680407657618, + -11.618916947323951, + -11.614043920770262, + -11.609061569590658, + -11.603969744355293, + -11.598768690118632, + -11.593458258082574, + -11.588038696793506, + -11.582509858095966, + -11.576871993990823, + -11.57112495698642, + -11.565269002552677, + -11.559303983807864, + -11.553230159748928, + -11.547047384056373, + -11.540755919267992, + -11.53435561963673, + -11.527846751227845, + -11.52122916884275, + -11.514503142124488, + -11.507668526371274, + -11.50072559482819, + -11.493674203272022, + -11.486514628553016, + -11.47924672693458, + -11.47187077886985, + -11.464386641071389, + -11.456794597650617, + -11.449094505712548, + -11.441286653044148, + -11.433370897154482, + -11.425347529498843, + -11.417216407967148, + -11.408977827700028, + -11.400631646938677, + -11.392178164563001, + -11.383617239099623, + -11.374949173192174, + -11.36617382565945, + -11.35729150289074, + -11.34830206398102, + -11.339205819112266, + -11.330002627594864, + -11.320692803435033, + -11.311276206134696, + -11.301753153540357, + -11.292123505332892, + -11.282387583200423, + -11.272545246972689, + -11.26259682222614, + -11.252542168890974, + -11.242381616451938, + -11.232115024930714, + -11.22174272772309, + -11.211264584911868, + -11.20068093383546, + -11.189991634600347, + -11.179197028534642, + -11.168296975705536, + -11.157291821454333, + -11.146181425815346, + -11.134966138132542, + -11.123645818371045, + -11.11222081993963, + -11.10069100266195, + -11.089056724057063, + -11.077317843770983, + -11.065474723447357, + -11.053527222550652, + -11.041475706830628, + -11.029320035555564, + -11.017060578650574, + -11.004697195083322, + -10.992230259004879, + -10.979659629074872, + -10.96698568365843, + -10.954208281098001, + -10.94132780399432, + -10.928344110310368, + -10.915257586955464, + -10.902068091445523, + -10.888776015022472, + -10.875381214747343, + -10.861884086198193, + -10.8482844859322, + -10.834582813935672, + -10.82077892618626, + -10.80687322710792, + -10.79286557208811, + -10.778756369988375, + -10.764545475581697, + -10.750233302202437, + -10.735819703941411, + -10.721305098678492, + -10.706689339741441, + -10.691972849595507, + -10.677155480796255, + -10.662237660390067, + -10.647219240113992, + -10.63210065166888, + -10.616881745886895, + -10.601562959180216, + -10.586144141421505, + -10.570625733763986, + -10.555007585105065, + -10.539290141341763, + -10.523473250342917, + -10.507557362832515, + -10.491542325561229, + -10.475428594112675, + -10.459216014106428, + -10.442905046004928, + -10.426495534240637, + -10.409987944200896, + -10.393382119064741, + -10.3766785292227, + -10.359877016508099, + -10.342978056368286, + -10.325981489254588, + -10.308887795685544, + -10.291696814686292, + -10.274409031912425, + -10.257024284870141, + -10.239543064422584, + -10.221965206482613, + -10.204291207174693, + -10.186520900771924, + -10.16865478868715, + -10.150692703493704, + -10.132635151958436, + -10.11448196487808, + -10.096233654433776, + -10.077890049574973, + -10.059451667947986, + -10.040918336595034, + -10.022290578677977, + -10.003568219254811, + -9.984751787088769, + -9.96584110514803, + -9.946836707860289, + -9.927738416068099, + -9.908546769887284, + -9.889261587950447, + -9.86988341616729, + -9.850412070848796, + -9.83084810377391, + -9.811191328856632, + -9.791442303799336, + -9.771600840060906, + -9.751667501302737, + -9.731642096457191, + -9.711525195253682, + -9.691316603953355, + -9.671016898451432, + -9.65062588226876, + -9.630144137508813, + -9.609571464877224, + -9.588908452767381, + -9.568154898960017, + -9.547311398244236, + -9.526377745360097, + -9.505354541567405, + -9.484241578498253, + -9.463039463944138, + -9.44174798632154, + -9.420367760068928, + -9.398898570255206, + -9.377341038076597, + -9.35569494513929, + -9.333960919468765, + -9.312138739151099, + -9.290229039096653, + -9.268231593750716, + -9.246147045049605, + -9.223975163642121, + -9.201716598600406, + -9.179371116680064, + -9.156939374172175, + -9.13442113382513, + -9.11181705925321, + -9.08912690906568, + -9.066351354331854, + -9.043490149373724, + -9.020543972832236, + -8.997512574633436, + -8.974396641070692, + -8.951195917548928, + -8.927911098167478, + -8.904541923633783, + -8.881089095981029, + -8.857552351094355, + -8.833932399058087, + -8.810228970797366, + -8.786442784560673, + -8.76257356616721, + -8.738622042196683, + -8.714587933170698, + -8.690471974139433, + -8.666273880197359, + -8.64199439499223, + -8.617633228027426, + -8.593191131690947, + -8.568667809731027, + -8.544064023448792, + -8.519379470639409, + -8.494614921678455, + -8.469770068244875, + -8.444845689935239, + -8.419841472124421, + -8.394758203827978, + -8.369595563913549, + -8.344354350973791, + -8.319034237182352, + -8.293636030895136, + -8.268159397403108, + -8.24260515498249, + -8.216972961843277, + -8.191263646398204, + -8.16547685953432, + -8.139613440004984, + -8.1136730311693, + -8.08765648230924, + -8.061563429036765, + -8.035394731374147, + -8.009150016947025, + -7.98283015674854, + -7.956434770168819, + -7.929964739394263, + -7.903419675335354, + -7.876800471607424, + -7.850106730382313, + -7.823339356956999, + -7.796497944478606, + -7.769583410184629, + -7.742595337934022, + -7.7155346571507435, + -7.688400942138315, + -7.661195134751903, + -7.6339167994593025, + -7.606566890847672, + -7.579144963206823, + -7.551651984160716, + -7.52408749752483, + -7.496452484231577, + -7.468746477319133, + -7.4409704713278275, + -7.4131239881756255, + -7.3852080363600265, + -7.35722212630078, + -7.329167280792322, + -7.30104299842641, + -7.272850316603534, + -7.244588721718228, + -7.216259266168362, + -7.187861423734587, + -7.15939626218829, + -7.1308632423086795, + -7.102263447615705, + -7.0735963254867755, + -7.044862975576792, + -7.016062831434035, + -6.987197009283921, + -6.95826492837296, + -6.929267721942747, + -6.900204794491437, + -6.8710772966976705, + -6.841884617849493, + -6.812627926530307, + -6.783306596304039, + -6.753921814181642, + -6.72447293744993, + -6.694961172056583, + -6.66538585850072, + -6.635748222166931, + -6.60604758622011, + -6.576285196031698, + -6.54646035683784, + -6.516574334592012, + -6.486626415975296, + -6.456617888121608, + -6.426548018541288, + -6.396418116158884, + -6.366227428658755, + -6.335977287416122, + -6.305666919579093, + -6.27529767967553, + -6.244868773602782, + -6.214381579729982, + -6.183835281973124, + -6.1532312832809355, + -6.1225687448030595, + -6.09184909486029, + -6.061071471002851, + -6.030237327730931, + -5.9993457781625175, + -5.968398303816436, + -5.937393992485536, + -5.906334353600337, + -5.8752184486957555, + -5.84404781604781, + -5.812821489946685, + -5.781541038504669, + -5.750205467747105, + -5.7188163766231295, + -5.687372741839524, + -5.655876194270821, + -5.624325680154248, + -5.592722863426803, + -5.561066658688901, + -5.529358764108608, + -5.497598061429061, + -5.465786284283379, + -5.433922280257815, + -5.4020078197642905, + -5.370041714866266, + -5.338025774129487, + -5.305958772663248, + -5.273842558632904, + -5.241675868680168, + -5.209460592108781, + -5.177195425489607, + -5.14488230087739, + -5.112519873107029, + -5.080110118661946, + -5.047651648898495, + -5.015146486500928, + -4.9825931974792015, + -4.9499938526422875, + -4.917346970653939, + -4.884654672447858, + -4.851915427290519, + -4.819131408324827, + -4.786301033236609, + -4.753426529621404, + -4.720506261236659, + -4.687542512519857, + -4.654533590826297, + -4.621481839953083, + -4.588385508254454, + -4.555247001528393, + -4.5220645063631135, + -4.488840493406025, + -4.455573084518734, + -4.4222648182233675, + -4.388913748510611, + -4.355522484985164, + -4.322089010452215, + -4.288616008995135, + -4.255101388678059, + -4.221547911733652, + -4.187953407674065, + -4.154320720771064, + -4.12064759796444, + -4.086936969686494, + -4.053186496004653, + -4.019399197966146, + -3.985572644110396, + -3.951709950887727, + -3.9178085903497974, + -3.883871779453215, + -3.84989688844998, + -3.8158872402747805, + -3.7818400976867976, + -3.7477588954920744, + -3.7136407828119626, + -3.6794893126648995, + -3.6453015139337324, + -3.6110810646835394, + -3.5768248664347495, + -3.542536729666918, + -3.5082134208569995, + -3.4738588908827, + -3.4394697628293875, + -3.405050136617685, + -3.370596482945688, + -3.3361130601211353, + -3.3015961766754183, + -3.2670502594744777, + -3.232471444264378, + -3.1978643375260805, + -3.1632248906285625, + -3.128557901758546, + -3.093859125277426, + -3.0591335642262085, + -3.0243767621769475, + -2.9895939414350194, + -2.9547804196827254, + -2.919941654266976, + -2.885072720407705, + -2.850179327866676, + -2.815256291147652, + -2.7803095915575726, + -2.745333762765404, + -2.7103350787357714, + -2.675307770085759, + -2.640258426785998, + -2.605180951792698, + -2.570082276993898, + -2.534955950320357, + -2.4998092744362554, + -2.4646354117504172, + -2.4294420678981514, + -2.3942219857070453, + -2.3589833097935036, + -2.323718325223899, + -2.2884356560678536, + -2.2531270866469866, + -2.217801766120139, + -2.182450929524131, + -2.1470843027034374, + -2.1116925164630174, + -2.0762859318907108, + -2.0408545130018605, + -2.0054093229694656, + -1.9699395874943944, + -1.9344571483880637, + -1.8989504109522282, + -1.863432083714661, + -1.8278896568837102, + -1.7923368075998944, + -1.7567600011196343, + -1.7211740017555142, + -1.685564121623189, + -1.6499463509617331, + -1.6143046982675007, + -1.5786565431048258, + -1.5429844125555527, + -1.5073072692889298, + -1.471605947296052, + -1.4359012239824318, + -1.4001719862060218, + -1.3644411052675565, + -1.3286852133840779, + -1.2929296152480438, + -1.2571483126201992, + -1.2213694606574914, + -1.1855639664281377, + -1.149763353769711, + -1.11393485473242, + -1.0781140137998149, + -1.042263652935786, + -1.0064241690521616, + -0.9705530289860183, + -0.9346965603363373, + -0.8988056389255555, + -0.8629339463743276, + -0.8270241196884017, + -0.7911391128745744, + -0.7552110771144338, + -0.7193148880030945, + -0.6833690650982306, + -0.6474641702375646, + -0.6115005474097823, + -0.5755899809608642, + -0.5396078234196271, + -0.5036955705836592, + -0.467692872826571, + -0.4317846503136179, + -0.39575700013727133, + -0.35986195277293515, + -0.32379992000146374, + -0.2879347827624799, + -0.25181700344962715, + -0.2160181852265717, + -0.1797888916725669, + -0.14415771471014244, + -0.1076254708877583, + -0.07259171809837357, + -0.03455828541965657, + -0.00552148681074322, +]; + +pub const HANN_T_2048: [f32; 2048] = [ + -0.0, + -5.017481713982461e-8, + -2.0050251339027817e-7, + -4.5068725038491125e-7, + -8.004322526440957e-7, + -1.249439812220558e-6, + -1.7974112933530176e-6, + -2.4440471371325776e-6, + -3.18904686616768e-6, + -4.03210908927111e-6, + -4.972931506141924e-6, + -6.01121091206927e-6, + -7.146643202629886e-6, + -8.378923378406167e-6, + -9.707745549707166e-6, + -1.113280294130066e-5, + -1.265378789714339e-5, + -1.4270391885138568e-5, + -1.598230550187861e-5, + -1.7789218477417332e-5, + -1.969081968003194e-5, + -2.1686797121002687e-5, + -2.3776837959401992e-5, + -2.5960628506883686e-5, + -2.8237854232483897e-5, + -3.0608199767432355e-5, + -3.3071348909962556e-5, + -3.562698463014372e-5, + -3.827478907469994e-5, + -4.1014443571859104e-5, + -4.384562863619003e-5, + -4.676802397345888e-5, + -4.9781308485487524e-5, + -5.2885160275019445e-5, + -5.607925665059448e-5, + -5.936327413142754e-5, + -6.273688845229594e-5, + -6.619977456843524e-5, + -6.9751606660439e-5, + -7.339205813916584e-5, + -7.712080165065239e-5, + -8.093750908103812e-5, + -8.484185156148579e-5, + -8.883349947312023e-5, + -9.291212245196962e-5, + -9.70773893939034e-5, + -0.00010132896845959288, + -0.00010566652707946616, + -0.0001100897319586721, + -0.00011459824908205635, + -0.00011919174371912743, + -0.00012386988042904922, + -0.0001286323230656278, + -0.00013347873478229778, + -0.0001384087780371332, + -0.00014342211459784514, + -0.00014851840554679625, + -0.0001536973112860154, + -0.00015895849154222305, + -0.00016430160537185377, + -0.00016972631116609352, + -0.00017523226665591525, + -0.00018081912891712457, + -0.0001864865543754047, + -0.00019223419881137278, + -0.0001980617173656349, + -0.00020396876454385486, + -0.00020995499422181823, + -0.0002160200596505053, + -0.000222163613461173, + -0.00022838530767043186, + -0.00023468479368533743, + -0.0002410617223084801, + -0.00024751574374308043, + -0.00025404650759809356, + -0.0002606536628933082, + -0.00026733685806446097, + -0.0002740957409683479, + -0.00028092995888794276, + -0.0002878391585375151, + -0.00029482298606776176, + -0.0003018810870709327, + -0.0003090131065859668, + -0.000316218689103626, + -0.00032349747857163985, + -0.00033084911839984866, + -0.000338273251465354, + -0.0003457695201176682, + -0.0003533375661838701, + -0.00036097703097376566, + -0.0003686875552850517, + -0.0003764687794084783, + -0.00038432034313301696, + -0.00039224188575103885, + -0.00040023304606348294, + -0.00040829346238504155, + -0.00041642277254933316, + -0.00042462061391409497, + -0.000432886623366363, + -0.0004412204373276667, + -0.00044962169175922123, + -0.00045809002216712016, + -0.00046662506360753235, + -0.00047522645069190934, + -0.0004838938175921777, + -0.000492626798045956, + -0.0005014250253617491, + -0.0005102881324241722, + -0.0005192157516991501, + -0.0005282075152391407, + -0.0005372630546883435, + -0.0005463820012879243, + -0.000555563985881232, + -0.0005648086389190218, + -0.0005741155904646782, + -0.0005834844701994379, + -0.0005929149074276227, + -0.0006024065310818655, + -0.000611958969728339, + -0.0006215718515719888, + -0.0006312448044617688, + -0.0006409774558958717, + -0.0006507694330269682, + -0.0006606203626674412, + -0.0006705298712946269, + -0.0006804975850560533, + -0.0006905231297746765, + -0.0007006061309541297, + -0.000710746213783957, + -0.0007209430031448634, + -0.0007311961236139537, + -0.0007415051994699789, + -0.000751869854698579, + -0.0007622897129975341, + -0.0007727643977820053, + -0.0007832935321897789, + -0.0007938767390865222, + -0.0008045136410710236, + -0.0008152038604804395, + -0.0008259470193955465, + -0.0008367427396459853, + -0.0008475906428155102, + -0.000858490350247236, + -0.0008694414830488855, + -0.0008804436620980362, + -0.0008914965080473696, + -0.0009025996413299152, + -0.0009137526821643001, + -0.0009249552505599914, + -0.0009362069663225458, + -0.0009475074490588489, + -0.0009588563181823685, + -0.0009702531929183873, + -0.0009816976923092571, + -0.0009931894352196307, + -0.0010047280403417105, + -0.0010163131262004845, + -0.0010279443111589704, + -0.0010396212134234474, + -0.0010513434510486964, + -0.001063110641943241, + -0.0010749224038745701, + -0.0010867783544743837, + -0.0010986781112438183, + -0.0011106212915586759, + -0.0011226075126746593, + -0.0011346363917325926, + -0.0011467075457636524, + -0.0011588205916945851, + -0.0011709751463529381, + -0.0011831708264722718, + -0.0011954072486973825, + -0.0012076840295895171, + -0.0012200007856315877, + -0.0012323571332333867, + -0.0012447526887367898, + -0.0012571870684209726, + -0.0012696598885076102, + -0.0012821707651660824, + -0.0012947193145186734, + -0.0013073051526457731, + -0.0013199278955910673, + -0.001332587159366738, + -0.0013452825599586458, + -0.0013580137133315264, + -0.0013707802354341672, + -0.0013835817422045932, + -0.0013964178495752479, + -0.0014092881734781664, + -0.0014221923298501468, + -0.0014351299346379263, + -0.0014481006038033414, + -0.0014611039533284958, + -0.0014741395992209157, + -0.0014872071575187137, + -0.0015003062442957343, + -0.0015134364756667106, + -0.0015265974677924029, + -0.0015397888368847488, + -0.0015530101992119977, + -0.0015662611711038492, + -0.0015795413689565782, + -0.0015928504092381703, + -0.0016061879084934372, + -0.0016195534833491462, + -0.0016329467505191235, + -0.0016463673268093764, + -0.0016598148291231928, + -0.0016732888744662485, + -0.0016867890799517034, + -0.001700315062805295, + -0.0017138664403704327, + -0.0017274428301132755, + -0.0017410438496278209, + -0.001754669116640973, + -0.0017683182490176189, + -0.0017819908647656953, + -0.0017956865820412454, + -0.0018094050191534827, + -0.0018231457945698348, + -0.0018369085269210007, + -0.00185069283500598, + -0.0018644983377971212, + -0.0018783246544451444, + -0.0018921714042841773, + -0.0019060382068367629, + -0.0019199246818188884, + -0.0019338304491449876, + -0.0019477551289329466, + -0.0019616983415091057, + -0.00197565970741325, + -0.0019896388474036006, + -0.002003635382461792, + -0.002017648933797852, + -0.0020316791228551737, + -0.0020457255713154736, + -0.0020597879011037597, + -0.0020738657343932734, + -0.0020879586936104473, + -0.002102066401439834, + -0.0021161884808290517, + -0.0021303245549937023, + -0.0021444742474223005, + -0.0021586371818811834, + -0.0021728129824194237, + -0.0021870012733737282, + -0.002201201679373336, + -0.0022154138253449064, + -0.0022296373365174042, + -0.0022438718384269678, + -0.002258116956921789, + -0.0022723723181669654, + -0.0022866375486493597, + -0.002300912275182449, + -0.0023151961249111624, + -0.002329488725316718, + -0.002343789704221449, + -0.0023580986897936244, + -0.0023724153105522546, + -0.0023867391953719085, + -0.002401069973487499, + -0.002415407274499084, + -0.002429750728376639, + -0.0024440999654648417, + -0.0024584546164878322, + -0.0024728143125539786, + -0.0024871786851606236, + -0.002501547366198835, + -0.0025159199879581364, + -0.0025302961831312424, + -0.0025446755848187712, + -0.0025590578265339676, + -0.0025734425422073957, + -0.002587829366191649, + -0.0026022179332660243, + -0.0026166078786412157, + -0.0026309988379639763, + -0.002645390447321787, + -0.0026597823432475093, + -0.0026741741627240357, + -0.002688565543188923, + -0.0027029561225390248, + -0.00271734553913511, + -0.0027317334318064813, + -0.002746119439855572, + -0.0027605032030625434, + -0.002774884361689872, + -0.0027892625564869267, + -0.0028036374286945337, + -0.0028180086200495402, + -0.0028323757727893592, + -0.002846738529656518, + -0.0028610965339031817, + -0.0028754494292956845, + -0.002889796860119034, + -0.0029041384711814234, + -0.0029184739078187217, + -0.0029328028158989577, + -0.002947124841826802, + -0.002961439632548028, + -0.0029757468355539676, + -0.0029900460988859655, + -0.0030043370711398064, + -0.0030186194014701537, + -0.0030328927395949557, + -0.0030471567357998647, + -0.0030614110409426256, + -0.0030756553064574727, + -0.0030898891843594983, + -0.0031041123272490313, + -0.003118324388315986, + -0.0031325250213442165, + -0.0031467138807158477, + -0.0031608906214156108, + -0.0031750548990351533, + -0.0031892063697773494, + -0.0032033446904605953, + -0.003217469518523095, + -0.0032315805120271346, + -0.0032456773296633506, + -0.0032597596307549774, + -0.003273827075262098, + -0.0032878793237858723, + -0.0033019160375727624, + -0.0033159368785187367, + -0.003329941509173482, + -0.0033439295927445802, + -0.003357900793101694, + -0.0033718547747807375, + -0.0033857912029880226, + -0.0033997097436044114, + -0.0034136100631894485, + -0.0034274918289854883, + -0.003441354708921795, + -0.0034551983716186578, + -0.003469022486391465, + -0.0034828267232547986, + -0.003496610752926483, + -0.0035103742468316525, + -0.0035241168771067864, + -0.0035378383166037495, + -0.0035515382388938022, + -0.0035652163182716117, + -0.0035788722297592575, + -0.003592505649110201, + -0.0036061162528132715, + -0.0036197037180966175, + -0.0036332677229316676, + -0.0036468079460370553, + -0.0036603240668825502, + -0.003673815765692971, + -0.0036872827234520904, + -0.0037007246219065153, + -0.003714141143569572, + -0.0037275319717251635, + -0.0037408967904316295, + -0.0037542352845255826, + -0.003767547139625733, + -0.0037808320421367073, + -0.003794089679252855, + -0.0038073197389620313, + -0.0038205219100493773, + -0.0038336958821010895, + -0.003846841345508167, + -0.003859957991470154, + -0.003873045511998869, + -0.00388610359992211, + -0.0038991319488873733, + -0.003912130253365526, + -0.00392509820865449, + -0.0039380355108829, + -0.003950941857013764, + -0.003963816944848089, + -0.003976660473028509, + -0.003989472141042896, + -0.004002251649227966, + -0.004014998698772846, + -0.004027712991722662, + -0.004040394230982087, + -0.004053042120318894, + -0.0040656563643674815, + -0.004078236668632394, + -0.0040907827394918266, + -0.004103294284201118, + -0.004115771010896222, + -0.004128212628597183, + -0.0041406188472115765, + -0.004152989377537953, + -0.004165323931269257, + -0.004177622220996241, + -0.004189883960210856, + -0.004202108863309643, + -0.004214296645597091, + -0.004226447023288999, + -0.004238559713515812, + -0.004250634434325958, + -0.004262670904689144, + -0.004274668844499673, + -0.004286627974579713, + -0.004298548016682584, + -0.004310428693495999, + -0.0043222697286453195, + -0.004334070846696773, + -0.004345831773160682, + -0.004357552234494644, + -0.0043692319581067375, + -0.004380870672358678, + -0.004392468106568987, + -0.004404023991016123, + -0.004415538056941623, + -0.004427010036553201, + -0.004438439663027864, + -0.0044498266705149826, + -0.004461170794139368, + -0.004472471770004328, + -0.004483729335194709, + -0.004494943227779916, + -0.004506113186816928, + -0.004517238952353299, + -0.004528320265430136, + -0.004539356868085066, + -0.004550348503355186, + -0.0045612949152800085, + -0.004572195848904379, + -0.0045830510502813835, + -0.004593860266475244, + -0.004604623245564193, + -0.00461533973664334, + -0.0046260094898275175, + -0.004636632256254111, + -0.004647207788085884, + -0.004657735838513774, + -0.004668216161759678, + -0.004678648513079234, + -0.004689032648764569, + -0.004699368326147045, + -0.0047096553035999794, + -0.004719893340541364, + -0.004730082197436561, + -0.004740221635800969, + -0.004750311418202706, + -0.004760351308265245, + -0.004770341070670058, + -0.004780280471159226, + -0.004790169276538046, + -0.004800007254677617, + -0.0048097941745174145, + -0.004819529806067841, + -0.004829213920412771, + -0.004838846289712073, + -0.004848426687204121, + -0.004857954887208284, + -0.004867430665127407, + -0.004876853797450272, + -0.004886224061754043, + -0.004895541236706694, + -0.004904805102069428, + -0.004914015438699072, + -0.0049231720285504614, + -0.004932274654678803, + -0.004941323101242028, + -0.004950317153503127, + -0.004959256597832468, + -0.004968141221710098, + -0.004976970813728029, + -0.004985745163592511, + -0.004994464062126284, + -0.0050031273012708126, + -0.005011734674088519, + -0.005020285974764973, + -0.005028780998611098, + -0.005037219542065331, + -0.005045601402695786, + -0.005053926379202392, + -0.0050621942714190234, + -0.0050704048803156, + -0.0050785580080001825, + -0.005086653457721049, + -0.005094691033868755, + -0.0051026705419781725, + -0.005110591788730514, + -0.0051184545819553525, + -0.0051262587306326055, + -0.005134004044894513, + -0.005141690336027602, + -0.005149317416474627, + -0.005156885099836499, + -0.005164393200874194, + -0.005171841535510648, + -0.0051792299208326354, + -0.005186558175092631, + -0.00519382611771065, + -0.005201033569276078, + -0.005208180351549484, + -0.005215266287464411, + -0.005222291201129155, + -0.005229254917828527, + -0.005236157264025592, + -0.005242998067363405, + -0.0052497771566667115, + -0.005256494361943648, + -0.005263149514387416, + -0.005269742446377945, + -0.005276272991483529, + -0.00528274098446246, + -0.00528914626126463, + -0.005295488659033134, + -0.0053017680161058355, + -0.005307984172016927, + -0.005314136967498475, + -0.005320226244481948, + -0.005326251846099709, + -0.0053322136166865245, + -0.00533811140178103, + -0.0053439450481271794, + -0.005349714403675704, + -0.005355419317585507, + -0.005361059640225105, + -0.005366635223173981, + -0.00537214591922398, + -0.005377591582380646, + -0.005382972067864581, + -0.005388287232112742, + -0.005393536932779758, + -0.005398721028739208, + -0.005403839380084902, + -0.005408891848132111, + -0.005413878295418828, + -0.00541879858570696, + -0.005423652583983549, + -0.0054284401564619325, + -0.005433161170582935, + -0.0054378154950159895, + -0.0054424029996602945, + -0.0054469235556459, + -0.005451377035334832, + -0.0054557633123221505, + -0.005460082261437023, + -0.005464333758743761, + -0.005468517681542858, + -0.005472633908371985, + -0.005476682319006998, + -0.0054806627944629024, + -0.005484575216994819, + -0.005488419470098917, + -0.005492195438513349, + -0.005495903008219136, + -0.005499542066441086, + -0.0055031125016486325, + -0.005506614203556719, + -0.005510047063126608, + -0.005513410972566724, + -0.00551670582533344, + -0.005519931516131868, + -0.00552308794091662, + -0.00552617499689257, + -0.005529192582515569, + -0.005532140597493177, + -0.005535018942785347, + -0.005537827520605113, + -0.005540566234419247, + -0.005543234988948912, + -0.005545833690170273, + -0.005548362245315133, + -0.005550820562871498, + -0.0055532085525841785, + -0.005555526125455318, + -0.0055577731937449665, + -0.005559949670971573, + -0.005562055471912514, + -0.005564090512604565, + -0.005566054710344384, + -0.0055679479836889525, + -0.005569770252456026, + -0.005571521437724532, + -0.005573201461834993, + -0.0055748102483898915, + -0.00557634772225405, + -0.005577813809554964, + -0.00557920843768315, + -0.005580531535292444, + -0.00558178303230031, + -0.0055829628598881055, + -0.005584070950501354, + -0.005585107237849983, + -0.005586071656908551, + -0.005586964143916454, + -0.005587784636378121, + -0.0055885330730631845, + -0.005589209394006641, + -0.005589813540508984, + -0.005590345455136324, + -0.005590805081720506, + -0.0055911923653591804, + -0.005591507252415876, + -0.005591749690520064, + -0.00559191962856717, + -0.005592017016718613, + -0.0055920418064017855, + -0.0055919939503100554, + -0.005591873402402708, + -0.005591680117904917, + -0.005591414053307651, + -0.005591075166367608, + -0.0055906634161070915, + -0.005590178762813899, + -0.00558962116804118, + -0.005588990594607277, + -0.005588287006595549, + -0.005587510369354194, + -0.005586660649496012, + -0.005585737814898211, + -0.005584741834702134, + -0.00558367267931302, + -0.00558253032039971, + -0.00558131473089436, + -0.005580025884992126, + -0.005578663758150831, + -0.0055772283270906185, + -0.005575719569793588, + -0.005574137465503411, + -0.005572481994724938, + -0.005570753139223769, + -0.005568950882025833, + -0.005567075207416926, + -0.00556512610094225, + -0.0055631035494059225, + -0.005561007540870474, + -0.0055588380646563315, + -0.00555659511134128, + -0.005554278672759898, + -0.0055518887420030055, + -0.0055494253134170555, + -0.005546888382603544, + -0.005544277946418371, + -0.005541594002971216, + -0.005538836551624868, + -0.005536005592994564, + -0.005533101128947279, + -0.00553012316260104, + -0.0055270716983241795, + -0.005523946741734612, + -0.005520748299699052, + -0.005517476380332263, + -0.005514130992996243, + -0.005510712148299426, + -0.005507219858095844, + -0.005503654135484298, + -0.005500014994807478, + -0.005496302451651101, + -0.0054925165228430035, + -0.005488657226452236, + -0.005484724581788135, + -0.005480718609399368, + -0.0054766393310729826, + -0.005472486769833421, + -0.00546826094994152, + -0.005463961896893508, + -0.0054595896374199605, + -0.005455144199484771, + -0.0054506256122840695, + -0.005446033906245157, + -0.005441369113025404, + -0.005436631265511127, + -0.005431820397816473, + -0.00542693654528227, + -0.00542197974447485, + -0.005416950033184889, + -0.00541184745042619, + -0.005406672036434489, + -0.0054014238326662075, + -0.005396102881797222, + -0.005390709227721588, + -0.0053852429155502686, + -0.005379703991609832, + -0.0053740925034411495, + -0.005368408499798056, + -0.00536265203064601, + -0.00535682314716073, + -0.005350921901726822, + -0.005344948347936374, + -0.005338902540587557, + -0.005332784535683192, + -0.005326594390429308, + -0.005320332163233679, + -0.005313997913704361, + -0.005307591702648178, + -0.005301113592069238, + -0.005294563645167386, + -0.005287941926336687, + -0.005281248501163847, + -0.005274483436426652, + -0.005267646800092382, + -0.0052607386613162, + -0.005253759090439529, + -0.005246708158988423, + -0.005239585939671908, + -0.005232392506380316, + -0.005225127934183597, + -0.005217792299329625, + -0.0052103856792424744, + -0.005202908152520691, + -0.005195359798935542, + -0.005187740699429255, + -0.005180050936113232, + -0.005172290592266266, + -0.005164459752332714, + -0.0051565585019206816, + -0.005148586927800175, + -0.0051405451179012485, + -0.0051324331613121195, + -0.00512425114827729, + -0.005115999170195637, + -0.005107677319618491, + -0.005099285690247703, + -0.005090824376933689, + -0.005082293475673466, + -0.005073693083608669, + -0.005065023299023552, + -0.005056284221342977, + -0.00504747595113038, + -0.005038598590085736, + -0.005029652241043491, + -0.005020637007970493, + -0.005011552995963902, + -0.005002400311249086, + -0.004993179061177493, + -0.00498388935422453, + -0.004974531299987398, + -0.00496510500918294, + -0.00495561059364545, + -0.004946048166324485, + -0.004936417841282655, + -0.004926719733693391, + -0.0049169539598387085, + -0.004907120637106958, + -0.004897219883990545, + -0.004887251820083657, + -0.004877216566079952, + -0.004867114243770255, + -0.004856944976040225, + -0.004846708886868009, + -0.004836406101321885, + -0.004826036745557894, + -0.004815600946817447, + -0.00480509883342493, + -0.004794530534785274, + -0.004783896181381541, + -0.00477319590477247, + -0.004762429837590016, + -0.004751598113536879, + -0.004740700867384016, + -0.004729738234968135, + -0.004718710353189185, + -0.004707617360007813, + -0.0046964593944428335, + -0.004685236596568657, + -0.004673949107512723, + -0.0046625970694529045, + -0.00465118062561492, + -0.004639699920269702, + -0.00462815509873078, + -0.004616546307351628, + -0.0046048736935230105, + -0.004593137405670313, + -0.004581337593250853, + -0.004569474406751181, + -0.004557547997684373, + -0.0045455585185872945, + -0.004533506123017871, + -0.004521390965552324, + -0.004509213201782411, + -0.004496972988312643, + -0.004484670482757485, + -0.004472305843738552, + -0.004459879230881792, + -0.0044473908048146375, + -0.004434840727163173, + -0.004422229160549263, + -0.00440955626858768, + -0.004396822215883218, + -0.0043840271680277865, + -0.004371171291597502, + -0.004358254754149757, + -0.0043452777242202765, + -0.004332240371320172, + -0.004319142865932963, + -0.0043059853795116105, + -0.004292768084475515, + -0.004279491154207515, + -0.004266154763050862, + -0.004252759086306203, + -0.004239304300228518, + -0.004225790582024082, + -0.004212218109847378, + -0.004198587062798032, + -0.004184897620917704, + -0.004171149965186989, + -0.004157344277522293, + -0.004143480740772704, + -0.004129559538716846, + -0.004115580856059724, + -0.004101544878429546, + -0.004087451792374555, + -0.004073301785359825, + -0.00405909504576406, + -0.004044831762876371, + -0.004030512126893052, + -0.004016136328914328, + -0.004001704560941115, + -0.0039872170158717374, + -0.00397267388749866, + -0.003958075370505197, + -0.003943421660462206, + -0.0039287129538247735, + -0.003913949447928896, + -0.003899131340988134, + -0.00388425883209027, + -0.003869332121193942, + -0.003854351409125275, + -0.003839316897574497, + -0.003824228789092542, + -0.0038090872870876424, + -0.003793892595821914, + -0.003778644920407924, + -0.0037633444668052503, + -0.0037479914418170313, + -0.0037325860530864996, + -0.0037171285090935105, + -0.003701619019151057, + -0.003686057793401765, + -0.003670445042814399, + -0.0036547809791803313, + -0.00363906581511002, + -0.0036232997640294647, + -0.0036074830401766574, + -0.003591615858598019, + -0.0035756984351448277, + -0.003559730986469633, + -0.0035437137300226647, + -0.0035276468840482267, + -0.0035115306675810812, + -0.003495365300442825, + -0.0034791510032382506, + -0.003462887997351701, + -0.003446576504943413, + -0.00343021674894585, + -0.0034138089530600228, + -0.003397353341751803, + -0.003380850140248229, + -0.003364299574533789, + -0.0033477018713467133, + -0.0033310572581752382, + -0.0033143659632538735, + -0.0032976282155596495, + -0.003280844244808367, + -0.0032640142814508205, + -0.0032471385566690283, + -0.003230217302372442, + -0.003213250751194152, + -0.0031962391364870786, + -0.0031791826923201587, + -0.0031620816534745203, + -0.0031449362554396465, + -0.003127746734409533, + -0.003110513327278834, + -0.0030932362716389987, + -0.0030759158057744014, + -0.0030585521686584596, + -0.0030411455999497447, + -0.0030236963399880774, + -0.0030062046297906287, + -0.0029886707110479954, + -0.002971094826120275, + -0.002953477218033134, + -0.00293581813047386, + -0.002918117807787412, + -0.0029003764949724585, + -0.0028825944376774035, + -0.0028647718821964165, + -0.002846909075465435, + -0.002829006265058177, + -0.0028110636991821336, + -0.002793081626674556, + -0.002775060296998435, + -0.0027569999602384747, + -0.002738900867097049, + -0.0027207632688901633, + -0.0027025874175433955, + -0.0026843735655878364, + -0.0026661219661560202, + -0.002647832872977847, + -0.0026295065403764938, + -0.0026111432232643274, + -0.0025927431771387965, + -0.0025743066580783277, + -0.0025558339227382066, + -0.0025373252283464524, + -0.00251878083269969, + -0.0025002009941590057, + -0.002481585971645803, + -0.0024629360246376498, + -0.002444251413164111, + -0.0024255323978025893, + -0.0024067792396741373, + -0.002387992200439283, + -0.002369171542293837, + -0.0023503175279646926, + -0.002331430420705622, + -0.0023125104842930686, + -0.0022935579830219224, + -0.0022745731817012996, + -0.0022555563456503067, + -0.0022365077406938058, + -0.002217427633158164, + -0.002198316289867006, + -0.0021791739781369525, + -0.002160000965773355, + -0.0021407975210660252, + -0.002121563912784956, + -0.002102300410176037, + -0.002083007282956765, + -0.0020636848013119444, + -0.002044333235889387, + -0.0020249528577956, + -0.0020055439385914735, + -0.0019861067502879542, + -0.0019666415653417247, + -0.0019471486566508649, + -0.001927628297550516, + -0.0019080807618085333, + -0.0018885063236211378, + -0.001868905257608559, + -0.001849277838810673, + -0.001829624342682635, + -0.0018099450450905078, + -0.0017902402223068813, + -0.0017705101510064904, + -0.0017507551082618267, + -0.0017309753715387423, + -0.001711171218692051, + -0.0016913429279611259, + -0.0016714907779654862, + -0.0016516150477003852, + -0.0016317160165323905, + -0.0016117939641949579, + -0.0015918491707840035, + -0.001571881916753469, + -0.0015518924829108836, + -0.0015318811504129186, + -0.0015118482007609418, + -0.0014917939157965624, + -0.0014717185776971758, + -0.0014516224689715004, + -0.0014315058724551127, + -0.0014113690713059767, + -0.0013912123489999689, + -0.0013710359893264001, + -0.0013508402763835316, + -0.00133062549457409, + -0.0013103919286007743, + -0.0012901398634617618, + -0.0012698695844462096, + -0.001249581377129751, + -0.00122927552736999, + -0.0012089523213019901, + -0.001188612045333761, + -0.001168254986141741, + -0.0011478814306662766, + -0.0011274916661070972, + -0.001107085979918787, + -0.0010866646598062545, + -0.0010662279937201978, + -0.0010457762698525665, + -0.0010253097766320203, + -0.0010048288027193857, + -0.0009843336370031085, + -0.0009638245685947034, + -0.0009433018868242006, + -0.0009227658812355908, + -0.0009022168415822653, + -0.0008816550578224548, + -0.0008610808201146654, + -0.0008404944188131106, + -0.0008198961444631434, + -0.0007992862877966822, + -0.0007786651397276383, + -0.000758032991347338, + -0.0007373901339199427, + -0.0007167368588778686, + -0.000696073457817202, + -0.000675400222493114, + -0.0006547174448152724, + -0.0006340254168432508, + -0.0006133244307819377, + -0.0005926147789769421, + -0.0005718967539099973, + -0.0005511706481943639, + -0.0005304367545702299, + -0.0005096953659001102, + -0.0004889467751642438, + -0.0004681912754559891, + -0.00044742915997721887, + -0.00042666072203371324, + -0.0004058862550305505, + -0.00038510605246749787, + -0.0003643204079344001, + -0.0003435296151065677, + -0.0003227339677401634, + -0.00030193375966758724, + -0.0002811292847928619, + -0.00026032083708701583, + -0.00023950871058346613, + -0.00021869319937340063, + -0.00019787459760115873, + -0.0001770531994596121, + -0.00015622929918554445, + -0.0001354031910550307, + -0.00011457516937881571, + -9.374552849769269e-5, + -7.291456277788082e-5, + -5.208256660640298e-5, + -3.124983438646293e-5, + -1.0416660532822329e-5, + 1.0416660532822329e-5, + 3.124983438646293e-5, + 5.208256660640298e-5, + 7.291456277788082e-5, + 9.374552849769269e-5, + 0.00011457516937881571, + 0.0001354031910550307, + 0.00015622929918554445, + 0.0001770531994596121, + 0.00019787459760115873, + 0.00021869319937340063, + 0.00023950871058346613, + 0.00026032083708701583, + 0.0002811292847928619, + 0.00030193375966758724, + 0.0003227339677401634, + 0.0003435296151065677, + 0.0003643204079344001, + 0.00038510605246749787, + 0.0004058862550305505, + 0.0004266607220337133, + 0.00044742915997721887, + 0.0004681912754559891, + 0.0004889467751642438, + 0.0005096953659001103, + 0.0005304367545702299, + 0.0005511706481943639, + 0.0005718967539099973, + 0.0005926147789769421, + 0.0006133244307819377, + 0.0006340254168432508, + 0.0006547174448152724, + 0.000675400222493114, + 0.000696073457817202, + 0.0007167368588778686, + 0.0007373901339199427, + 0.000758032991347338, + 0.0007786651397276385, + 0.0007992862877966822, + 0.0008198961444631434, + 0.0008404944188131106, + 0.0008610808201146654, + 0.0008816550578224548, + 0.0009022168415822653, + 0.0009227658812355908, + 0.0009433018868242006, + 0.0009638245685947034, + 0.0009843336370031087, + 0.0010048288027193857, + 0.0010253097766320203, + 0.0010457762698525665, + 0.0010662279937201978, + 0.0010866646598062545, + 0.001107085979918787, + 0.0011274916661070972, + 0.0011478814306662766, + 0.001168254986141741, + 0.001188612045333761, + 0.0012089523213019901, + 0.00122927552736999, + 0.001249581377129751, + 0.0012698695844462098, + 0.0012901398634617618, + 0.0013103919286007743, + 0.00133062549457409, + 0.0013508402763835316, + 0.0013710359893263997, + 0.0013912123489999689, + 0.0014113690713059767, + 0.0014315058724551132, + 0.0014516224689715006, + 0.0014717185776971758, + 0.0014917939157965624, + 0.0015118482007609418, + 0.0015318811504129186, + 0.0015518924829108836, + 0.001571881916753469, + 0.0015918491707840037, + 0.001611793964194958, + 0.0016317160165323905, + 0.0016516150477003855, + 0.0016714907779654862, + 0.0016913429279611259, + 0.001711171218692051, + 0.0017309753715387423, + 0.001750755108261827, + 0.0017705101510064906, + 0.0017902402223068813, + 0.0018099450450905078, + 0.001829624342682635, + 0.001849277838810673, + 0.001868905257608559, + 0.001888506323621138, + 0.0019080807618085335, + 0.001927628297550516, + 0.0019471486566508653, + 0.001966641565341725, + 0.0019861067502879547, + 0.0020055439385914735, + 0.0020249528577956, + 0.002044333235889387, + 0.002063684801311945, + 0.002083007282956765, + 0.002102300410176037, + 0.002121563912784956, + 0.0021407975210660252, + 0.002160000965773355, + 0.0021791739781369525, + 0.002198316289867006, + 0.0022174276331581645, + 0.0022365077406938058, + 0.002255556345650307, + 0.0022745731817012996, + 0.002293557983021923, + 0.0023125104842930686, + 0.002331430420705622, + 0.0023503175279646926, + 0.0023691715422938377, + 0.0023879922004392835, + 0.0024067792396741373, + 0.0024255323978025893, + 0.002444251413164112, + 0.0024629360246376493, + 0.002481585971645803, + 0.0025002009941590057, + 0.0025187808326996904, + 0.002537325228346453, + 0.0025558339227382066, + 0.0025743066580783277, + 0.002592743177138797, + 0.002611143223264327, + 0.0026295065403764938, + 0.002647832872977847, + 0.0026661219661560207, + 0.0026843735655878364, + 0.0027025874175433955, + 0.0027207632688901633, + 0.0027389008670970494, + 0.0027569999602384742, + 0.002775060296998435, + 0.002793081626674556, + 0.002811063699182134, + 0.002829006265058177, + 0.002846909075465435, + 0.0028647718821964165, + 0.002882594437677404, + 0.002900376494972458, + 0.0029181178077874125, + 0.00293581813047386, + 0.002953477218033134, + 0.002971094826120275, + 0.002988670711047996, + 0.0030062046297906295, + 0.0030236963399880783, + 0.003041145599949744, + 0.0030585521686584604, + 0.0030759158057744014, + 0.0030932362716389987, + 0.003110513327278834, + 0.0031277467344095334, + 0.003144936255439647, + 0.0031620816534745208, + 0.0031791826923201587, + 0.0031962391364870786, + 0.003213250751194152, + 0.0032302173023724427, + 0.0032471385566690283, + 0.0032640142814508205, + 0.003280844244808367, + 0.0032976282155596504, + 0.003314365963253873, + 0.0033310572581752382, + 0.0033477018713467133, + 0.00336429957453379, + 0.003380850140248229, + 0.003397353341751804, + 0.0034138089530600228, + 0.00343021674894585, + 0.003446576504943413, + 0.0034628879973517012, + 0.0034791510032382506, + 0.003495365300442825, + 0.0035115306675810812, + 0.0035276468840482267, + 0.0035437137300226656, + 0.003559730986469633, + 0.0035756984351448277, + 0.003591615858598019, + 0.003607483040176658, + 0.0036232997640294655, + 0.0036390658151100198, + 0.0036547809791803313, + 0.003670445042814399, + 0.0036860577934017657, + 0.0037016190191510564, + 0.003717128509093511, + 0.0037325860530865, + 0.0037479914418170317, + 0.00376334446680525, + 0.003778644920407924, + 0.0037938925958219145, + 0.0038090872870876437, + 0.003824228789092542, + 0.003839316897574497, + 0.003854351409125276, + 0.003869332121193942, + 0.0038842588320902698, + 0.003899131340988135, + 0.003913949447928896, + 0.003928712953824774, + 0.003943421660462205, + 0.003958075370505197, + 0.00397267388749866, + 0.0039872170158717374, + 0.004001704560941115, + 0.004016136328914329, + 0.004030512126893052, + 0.004044831762876372, + 0.00405909504576406, + 0.004073301785359825, + 0.004087451792374555, + 0.004101544878429546, + 0.004115580856059724, + 0.004129559538716848, + 0.004143480740772704, + 0.004157344277522294, + 0.004171149965186988, + 0.004184897620917704, + 0.0041985870627980326, + 0.004212218109847379, + 0.004225790582024081, + 0.004239304300228518, + 0.004252759086306203, + 0.004266154763050863, + 0.004279491154207514, + 0.004292768084475516, + 0.004305985379511611, + 0.004319142865932963, + 0.00433224037132017, + 0.004345277724220277, + 0.004358254754149758, + 0.004371171291597504, + 0.0043840271680277865, + 0.004396822215883218, + 0.004409556268587681, + 0.004422229160549264, + 0.004434840727163173, + 0.0044473908048146375, + 0.004459879230881792, + 0.004472305843738554, + 0.004484670482757485, + 0.004496972988312643, + 0.004509213201782412, + 0.004521390965552325, + 0.004533506123017871, + 0.0045455585185872945, + 0.004557547997684373, + 0.004569474406751183, + 0.004581337593250852, + 0.004593137405670313, + 0.004604873693523011, + 0.004616546307351628, + 0.00462815509873078, + 0.004639699920269703, + 0.0046511806256149205, + 0.004662597069452906, + 0.004673949107512722, + 0.004685236596568657, + 0.004696459394442834, + 0.004707617360007814, + 0.004718710353189184, + 0.004729738234968135, + 0.004740700867384017, + 0.0047515981135368805, + 0.004762429837590016, + 0.0047731959047724705, + 0.004783896181381543, + 0.004794530534785274, + 0.00480509883342493, + 0.004815600946817448, + 0.004826036745557894, + 0.0048364061013218855, + 0.0048467088868680095, + 0.004856944976040225, + 0.004867114243770258, + 0.004877216566079953, + 0.004887251820083657, + 0.004897219883990544, + 0.004907120637106958, + 0.0049169539598387085, + 0.00492671973369339, + 0.004936417841282657, + 0.004946048166324487, + 0.004955610593645451, + 0.0049651050091829374, + 0.0049745312999873986, + 0.00498388935422453, + 0.004993179061177495, + 0.005002400311249087, + 0.005011552995963902, + 0.005020637007970495, + 0.0050296522410434915, + 0.005038598590085735, + 0.005047475951130379, + 0.005056284221342977, + 0.005065023299023553, + 0.005073693083608669, + 0.0050822934756734675, + 0.005090824376933689, + 0.005099285690247705, + 0.00510767731961849, + 0.005115999170195637, + 0.0051242511482772896, + 0.00513243316131212, + 0.005140545117901249, + 0.005148586927800176, + 0.005156558501920682, + 0.005164459752332715, + 0.005172290592266265, + 0.0051800509361132315, + 0.005187740699429255, + 0.0051953597989355445, + 0.005202908152520691, + 0.005210385679242477, + 0.005217792299329626, + 0.0052251279341836, + 0.005232392506380314, + 0.005239585939671909, + 0.005246708158988423, + 0.005253759090439531, + 0.005260738661316201, + 0.005267646800092382, + 0.0052744834364266534, + 0.005281248501163847, + 0.005287941926336687, + 0.005294563645167386, + 0.005301113592069238, + 0.005307591702648181, + 0.00531399791370436, + 0.005320332163233682, + 0.005326594390429308, + 0.005332784535683194, + 0.005338902540587555, + 0.005344948347936374, + 0.005350921901726823, + 0.005356823147160732, + 0.005362652030646011, + 0.005368408499798055, + 0.005374092503441151, + 0.005379703991609832, + 0.005385242915550267, + 0.00539070922772159, + 0.005396102881797224, + 0.005401423832666211, + 0.005406672036434487, + 0.005411847450426192, + 0.005416950033184888, + 0.005421979744474854, + 0.005426936545282272, + 0.005431820397816475, + 0.0054366312655111295, + 0.005441369113025405, + 0.005446033906245159, + 0.0054506256122840695, + 0.005455144199484772, + 0.0054595896374199605, + 0.005463961896893507, + 0.005468260949941522, + 0.005472486769833421, + 0.005476639331072986, + 0.005480718609399367, + 0.005484724581788135, + 0.005488657226452236, + 0.005492516522843006, + 0.005496302451651102, + 0.00550001499480748, + 0.0055036541354843, + 0.005507219858095847, + 0.005510712148299426, + 0.005514130992996243, + 0.005517476380332265, + 0.0055207482996990544, + 0.00552394674173461, + 0.005527071698324183, + 0.005530123162601041, + 0.005533101128947284, + 0.005536005592994563, + 0.005538836551624871, + 0.005541594002971217, + 0.005544277946418374, + 0.005546888382603546, + 0.005549425313417057, + 0.005551888742003007, + 0.005554278672759901, + 0.00555659511134128, + 0.0055588380646563315, + 0.005561007540870476, + 0.0055631035494059225, + 0.00556512610094225, + 0.005567075207416929, + 0.005568950882025833, + 0.0055707531392237735, + 0.005572481994724936, + 0.005574137465503413, + 0.005575719569793588, + 0.00557722832709062, + 0.005578663758150833, + 0.005580025884992127, + 0.005581314730894364, + 0.0055825303203997124, + 0.00558367267931302, + 0.005584741834702134, + 0.005585737814898213, + 0.005586660649496014, + 0.005587510369354193, + 0.005588287006595552, + 0.005588990594607277, + 0.005589621168041184, + 0.0055901787628138975, + 0.005590663416107093, + 0.005591075166367608, + 0.005591414053307655, + 0.005591680117904918, + 0.005591873402402708, + 0.005591993950310057, + 0.005592041806401788, + 0.005592017016718613, + 0.00559191962856717, + 0.005591749690520066, + 0.005591507252415878, + 0.00559119236535918, + 0.005590805081720509, + 0.0055903454551363245, + 0.005589813540508987, + 0.00558920939400664, + 0.005588533073063185, + 0.005587784636378121, + 0.005586964143916457, + 0.0055860716569085525, + 0.005585107237849984, + 0.005584070950501359, + 0.005582962859888108, + 0.00558178303230031, + 0.005580531535292444, + 0.005579208437683152, + 0.005577813809554966, + 0.00557634772225405, + 0.005574810248389895, + 0.005573201461834995, + 0.005571521437724537, + 0.005569770252456023, + 0.005567947983688955, + 0.005566054710344384, + 0.005564090512604569, + 0.005562055471912515, + 0.005559949670971574, + 0.005557773193744969, + 0.0055555261254553205, + 0.0055532085525841785, + 0.005550820562871498, + 0.005548362245315134, + 0.005545833690170274, + 0.00554323498894891, + 0.005540566234419251, + 0.005537827520605114, + 0.005535018942785352, + 0.005532140597493176, + 0.005529192582515571, + 0.00552617499689257, + 0.005523087940916624, + 0.0055199315161318695, + 0.005516705825333442, + 0.005513410972566728, + 0.0055100470631266095, + 0.005506614203556719, + 0.0055031125016486325, + 0.0054995420664410875, + 0.005495903008219139, + 0.005492195438513348, + 0.005488419470098921, + 0.00548457521699482, + 0.005480662794462908, + 0.005476682319006996, + 0.005472633908371987, + 0.005468517681542858, + 0.005464333758743765, + 0.0054600822614370255, + 0.005455763312322152, + 0.005451377035334836, + 0.005446923555645903, + 0.0054424029996602945, + 0.0054378154950159895, + 0.005433161170582937, + 0.005428440156461934, + 0.0054236525839835474, + 0.005418798585706964, + 0.00541387829541883, + 0.005408891848132116, + 0.0054038393800849, + 0.00539872102873921, + 0.005393536932779758, + 0.005388287232112745, + 0.005382972067864582, + 0.005377591582380647, + 0.005372145919223982, + 0.005366635223173983, + 0.005361059640225105, + 0.0053554193175855075, + 0.005349714403675705, + 0.005343945048127181, + 0.005338111401781029, + 0.005332213616686528, + 0.005326251846099711, + 0.005320226244481953, + 0.005314136967498475, + 0.0053079841720169284, + 0.0053017680161058355, + 0.005295488659033139, + 0.005289146261264632, + 0.00528274098446246, + 0.005276272991483533, + 0.0052697424463779485, + 0.005263149514387418, + 0.005256494361943647, + 0.005249777156666714, + 0.005242998067363406, + 0.005236157264025592, + 0.00522925491782853, + 0.005222291201129157, + 0.0052152662874644165, + 0.005208180351549483, + 0.00520103356927608, + 0.00519382611771065, + 0.005186558175092635, + 0.005179229920832638, + 0.005171841535510648, + 0.005164393200874198, + 0.005156885099836501, + 0.005149317416474629, + 0.005141690336027601, + 0.005134004044894515, + 0.005126258730632606, + 0.0051184545819553525, + 0.005110591788730518, + 0.005102670541978173, + 0.00509469103386876, + 0.005086653457721048, + 0.005078558008000183, + 0.0050704048803156, + 0.005062194271419027, + 0.0050539263792023946, + 0.005045601402695786, + 0.005037219542065335, + 0.005028780998611101, + 0.0050202859747649755, + 0.005011734674088518, + 0.005003127301270816, + 0.004994464062126285, + 0.004985745163592511, + 0.004976970813728032, + 0.004968141221710099, + 0.004959256597832473, + 0.004950317153503125, + 0.00494132310124203, + 0.004932274654678803, + 0.004923172028550466, + 0.004914015438699074, + 0.004904805102069428, + 0.004895541236706697, + 0.004886224061754044, + 0.004876853797450273, + 0.004867430665127406, + 0.004857954887208287, + 0.004848426687204122, + 0.004838846289712073, + 0.004829213920412774, + 0.004819529806067843, + 0.00480979417451742, + 0.004800007254677616, + 0.004790169276538047, + 0.004780280471159226, + 0.004770341070670062, + 0.004760351308265248, + 0.004750311418202706, + 0.004740221635800974, + 0.004730082197436563, + 0.004719893340541366, + 0.004709655303599978, + 0.004699368326147047, + 0.004689032648764571, + 0.004678648513079234, + 0.004668216161759681, + 0.0046577358385137746, + 0.0046472077880858895, + 0.00463663225625411, + 0.004626009489827519, + 0.00461533973664334, + 0.004604623245564197, + 0.004593860266475246, + 0.0045830510502813835, + 0.004572195848904384, + 0.004561294915280011, + 0.004550348503355186, + 0.004539356868085064, + 0.004528320265430139, + 0.004517238952353301, + 0.004506113186816928, + 0.004494943227779919, + 0.00448372933519471, + 0.004472471770004334, + 0.004461170794139366, + 0.004449826670514983, + 0.004438439663027864, + 0.004427010036553205, + 0.004415538056941624, + 0.004404023991016124, + 0.004392468106568991, + 0.00438087067235868, + 0.0043692319581067375, + 0.004357552234494643, + 0.004345831773160684, + 0.004334070846696775, + 0.004322269728645318, + 0.004310428693496002, + 0.004298548016682586, + 0.0042866279745797185, + 0.00427466884449967, + 0.004262670904689146, + 0.004250634434325958, + 0.004238559713515817, + 0.004226447023289, + 0.004214296645597092, + 0.004202108863309647, + 0.00418988396021086, + 0.004177622220996241, + 0.0041653239312692564, + 0.004152989377537956, + 0.004140618847211577, + 0.004128212628597181, + 0.004115771010896225, + 0.004103294284201119, + 0.004090782739491833, + 0.004078236668632392, + 0.004065656364367483, + 0.004053042120318894, + 0.00404039423098209, + 0.004027712991722663, + 0.004014998698772846, + 0.00400225164922797, + 0.0039894721410428996, + 0.003976660473028509, + 0.003963816944848087, + 0.003950941857013768, + 0.0039380355108829005, + 0.003925098208654489, + 0.00391213025336553, + 0.003899131948887375, + 0.003886103599922115, + 0.003873045511998866, + 0.0038599579914701558, + 0.0038468413455081674, + 0.003833695882101093, + 0.003820521910049379, + 0.0038073197389620313, + 0.0037940896792528593, + 0.0037808320421367104, + 0.003767547139625733, + 0.0037542352845255813, + 0.0037408967904316325, + 0.00372753197172517, + 0.0037141411435695705, + 0.003700724621906519, + 0.003687282723452092, + 0.0036738157656929765, + 0.0036603240668825468, + 0.003646807946037057, + 0.003633267722931673, + 0.0036197037180966223, + 0.003606116252813273, + 0.003592505649110201, + 0.0035788722297592605, + 0.0035652163182716143, + 0.0035515382388938022, + 0.003537838316603749, + 0.0035241168771067894, + 0.0035103742468316585, + 0.003496610752926482, + 0.003482826723254801, + 0.0034690224863914666, + 0.0034551983716186617, + 0.003441354708921793, + 0.003427491828985489, + 0.0034136100631894546, + 0.0033997097436044145, + 0.0033857912029880235, + 0.0033718547747807375, + 0.003357900793101698, + 0.0033439295927445815, + 0.003329941509173482, + 0.003315936878518741, + 0.003301916037572764, + 0.003287879323785879, + 0.0032738270752620965, + 0.0032597596307549796, + 0.0032456773296633515, + 0.00323158051202714, + 0.0032174695185230983, + 0.0032033446904605966, + 0.0031892063697773546, + 0.0031750548990351563, + 0.0031608906214156125, + 0.0031467138807158477, + 0.0031325250213442195, + 0.0031183243883159887, + 0.0031041123272490313, + 0.0030898891843595027, + 0.0030756553064574745, + 0.003061411040942632, + 0.003047156735799863, + 0.0030328927395949588, + 0.003018619401470154, + 0.0030043370711398116, + 0.0029900460988859685, + 0.0029757468355539694, + 0.002961439632548033, + 0.002947124841826805, + 0.0029328028158989595, + 0.0029184739078187217, + 0.0029041384711814273, + 0.002889796860119036, + 0.0028754494292956845, + 0.002861096533903186, + 0.0028467385296565193, + 0.0028323757727893653, + 0.0028180086200495385, + 0.002803637428694536, + 0.002789262556486928, + 0.002774884361689877, + 0.0027605032030625456, + 0.0027461194398555725, + 0.0027317334318064865, + 0.0027173455391351128, + 0.002702956122539025, + 0.002688565543188923, + 0.0026741741627240396, + 0.002659782343247511, + 0.002645390447321787, + 0.0026309988379639793, + 0.0026166078786412175, + 0.0026022179332660295, + 0.002587829366191647, + 0.0025734425422073983, + 0.0025590578265339676, + 0.0025446755848187756, + 0.002530296183131245, + 0.0025159199879581373, + 0.0025015473661988393, + 0.002487178685160627, + 0.0024728143125539804, + 0.0024584546164878322, + 0.002444099965464845, + 0.0024297507283766407, + 0.002415407274499084, + 0.0024010699734875024, + 0.0023867391953719106, + 0.0023724153105522607, + 0.0023580986897936227, + 0.0023437897042214518, + 0.002329488725316719, + 0.002315196124911166, + 0.0023009122751824506, + 0.0022866375486493605, + 0.0022723723181669697, + 0.0022581169569217915, + 0.0022438718384269686, + 0.0022296373365174034, + 0.00221541382534491, + 0.002201201679373337, + 0.0021870012733737282, + 0.002172812982419427, + 0.002158637181881186, + 0.0021444742474223057, + 0.0021303245549937006, + 0.0021161884808290534, + 0.002102066401439835, + 0.0020879586936104508, + 0.002073865734393276, + 0.0020597879011037606, + 0.0020457255713154784, + 0.0020316791228551763, + 0.002017648933797854, + 0.002003635382461792, + 0.001989638847403604, + 0.001975659707413252, + 0.0019616983415091057, + 0.0019477551289329496, + 0.0019338304491449889, + 0.001919924681818894, + 0.001906038206836762, + 0.001892171404284179, + 0.0018783246544451452, + 0.0018644983377971247, + 0.0018506928350059822, + 0.0018369085269210007, + 0.0018231457945698396, + 0.0018094050191534855, + 0.0017956865820412463, + 0.0017819908647656944, + 0.0017683182490176217, + 0.001754669116640974, + 0.0017410438496278209, + 0.0017274428301132783, + 0.0017138664403704344, + 0.0017003150628052998, + 0.0016867890799517012, + 0.0016732888744662505, + 0.0016598148291231936, + 0.00164636732680938, + 0.0016329467505191264, + 0.0016195534833491462, + 0.001606187908493442, + 0.0015928504092381723, + 0.0015795413689565793, + 0.0015662611711038483, + 0.0015530101992120005, + 0.0015397888368847497, + 0.0015265974677924029, + 0.0015134364756667136, + 0.001500306244295736, + 0.0014872071575187183, + 0.0014741395992209148, + 0.0014611039533284978, + 0.0014481006038033423, + 0.0014351299346379294, + 0.0014221923298501486, + 0.0014092881734781664, + 0.0013964178495752518, + 0.0013835817422045954, + 0.001370780235434168, + 0.0013580137133315253, + 0.0013452825599586486, + 0.0013325871593667389, + 0.0013199278955910673, + 0.001307305152645776, + 0.0012947193145186754, + 0.0012821707651660863, + 0.001269659888507609, + 0.0012571870684209745, + 0.0012447526887367898, + 0.0012323571332333895, + 0.0012200007856315897, + 0.0012076840295895171, + 0.0011954072486973853, + 0.0011831708264722737, + 0.0011709751463529392, + 0.0011588205916945851, + 0.0011467075457636542, + 0.0011346363917325937, + 0.0011226075126746593, + 0.0011106212915586778, + 0.0010986781112438191, + 0.0010867783544743876, + 0.001074922403874569, + 0.0010631106419432418, + 0.0010513434510486975, + 0.0010396212134234494, + 0.0010279443111589723, + 0.0010163131262004856, + 0.0010047280403417136, + 0.0009931894352196327, + 0.000981697692309258, + 0.0009702531929183873, + 0.0009588563181823704, + 0.0009475074490588499, + 0.000936206966322545, + 0.0009249552505599944, + 0.0009137526821643012, + 0.0009025996413299192, + 0.0008914965080473686, + 0.0008804436620980373, + 0.0008694414830488855, + 0.0008584903502472381, + 0.0008475906428155112, + 0.0008367427396459853, + 0.0008259470193955486, + 0.0008152038604804406, + 0.0008045136410710246, + 0.0007938767390865222, + 0.000783293532189781, + 0.0007727643977820053, + 0.0007622897129975341, + 0.0007518698546985811, + 0.0007415051994699799, + 0.0007311961236139569, + 0.0007209430031448624, + 0.0007107462137839579, + 0.0007006061309541297, + 0.0006905231297746786, + 0.0006804975850560543, + 0.000670529871294628, + 0.0006606203626674433, + 0.0006507694330269691, + 0.0006409774558958729, + 0.0006312448044617688, + 0.0006215718515719909, + 0.000611958969728339, + 0.0006024065310818646, + 0.0005929149074276248, + 0.0005834844701994379, + 0.0005741155904646802, + 0.0005648086389190207, + 0.000555563985881233, + 0.0005463820012879243, + 0.0005372630546883445, + 0.0005282075152391418, + 0.0005192157516991501, + 0.0005102881324241743, + 0.0005014250253617511, + 0.000492626798045956, + 0.0004838938175921777, + 0.0004752264506919105, + 0.0004666250636075334, + 0.00045809002216712016, + 0.00044962169175922335, + 0.0004412204373276677, + 0.00043288662336636515, + 0.00042462061391409383, + 0.0004164227725493343, + 0.00040829346238504155, + 0.0004002330460634851, + 0.00039224188575103885, + 0.00038432034313301696, + 0.0003764687794084794, + 0.0003686875552850527, + 0.00036097703097376675, + 0.00035333756618386906, + 0.0003457695201176693, + 0.0003382732514653551, + 0.00033084911839984866, + 0.00032349747857164093, + 0.000316218689103626, + 0.000309013106585969, + 0.0003018810870709327, + 0.00029482298606776285, + 0.0002878391585375151, + 0.00028092995888794384, + 0.00027409574096834893, + 0.00026733685806446097, + 0.00026065366289330927, + 0.00025404650759809356, + 0.00024751574374308043, + 0.000241061722308479, + 0.00023468479368533854, + 0.00022838530767043186, + 0.000222163613461173, + 0.0002160200596505064, + 0.00020995499422181823, + 0.00020396876454385708, + 0.0001980617173656338, + 0.00019223419881137278, + 0.0001864865543754047, + 0.00018081912891712568, + 0.00017523226665591636, + 0.00016972631116609352, + 0.0001643016053718549, + 0.00015895849154222305, + 0.00015369731128601652, + 0.00014851840554679625, + 0.00014342211459784625, + 0.0001384087780371343, + 0.00013347873478229778, + 0.0001286323230656278, + 0.00012386988042905033, + 0.00011919174371912855, + 0.00011459824908205522, + 0.00011008973195867322, + 0.00010566652707946616, + 0.00010132896845959288, + 9.70773893939034e-5, + 9.291212245196962e-5, + 8.883349947312136e-5, + 8.484185156148579e-5, + 8.093750908103812e-5, + 7.712080165065239e-5, + 7.339205813916697e-5, + 6.975160666044014e-5, + 6.619977456843524e-5, + 6.273688845229594e-5, + 5.936327413142754e-5, + 5.607925665059563e-5, + 5.2885160275019445e-5, + 4.9781308485487524e-5, + 4.676802397345888e-5, + 4.384562863619003e-5, + 4.1014443571859104e-5, + 3.827478907469994e-5, + 3.562698463014372e-5, + 3.307134890996371e-5, + 3.0608199767432355e-5, + 2.8237854232483897e-5, + 2.5960628506883686e-5, + 2.3776837959401992e-5, + 2.1686797121002687e-5, + 1.969081968003194e-5, + 1.7789218477417332e-5, + 1.5982305501879772e-5, + 1.4270391885138568e-5, + 1.265378789714339e-5, + 1.113280294130066e-5, + 9.707745549708333e-6, + 8.378923378406167e-6, + 7.146643202629886e-6, + 6.01121091206927e-6, + 4.972931506141924e-6, + 4.03210908927111e-6, + 3.18904686616768e-6, + 2.4440471371325776e-6, + 1.7974112933530176e-6, + 1.249439812220558e-6, + 8.004322526440957e-7, + 4.5068725038491125e-7, + 2.0050251339027817e-7, + 5.017481713982461e-8, + 0.0, +];